Od dzisiaj można testować TclDtrace w wersji 0.2. Zawiera ona pełną obsługę prostych sond. Udało mi się napisać już pierwszy działający program korzystający z mojej biblioteki. Działa sprawnie i bezbłędnie, acz z pewnymi ograniczeniami…
Jak na ten moment możliwe jest jedynie sprawdzanie, które sondy zostały odpalone oraz co wypisały. Brakuje wsparcia dla agregacji oraz chwytania procesów. Nie przebrnąłem jeszcze przez cudo jakim jest TEA buildsystem, więc bibliotekę trzeba instalować ręcznie. Dokumentacja dostępna jest na wiki.
Wspomniany program:
{geshi lang=tcl} package require dtrace # Display instructions {{{ puts {Please input probes in the standard one-liner format:} puts {[[[provider:] module:] function:] name [[predicate] action]} puts {Empty probe (just enter) ends the input,} # }}} # Get sources {{{ set probes_sources [list] set probes_count 1 puts “probe $probes_count:” gets stdin probe_line while {$probe_line != “"} { set probes_sources [linsert $probes_sources end $probe_line] set probes_count [expr {$probes_count + 1}] puts “probe $probes_count:” gets stdin probe_line } set probes_count [expr {$probes_count
- 1}] # }}} # Get them compiled and executed {{{ set dhandle [dtrace open -foldpdesc 1] set OK_count 0 set i 1 set compiled_probes [list] foreach probe_line $probes_sources { if { [ catch { puts -nonewline “Processing probe $i: $probe_line " set i [expr {$i + 1}] puts -nonewline . set compiled [dtrace compile $dhandle $probe_line] puts -nonewline . set running [dtrace exec $compiled] puts -nonewline . set OK_count [expr {$OK_count + 1}] puts -nonewline " OK” } ] } { puts -nonewline “FAILED”} puts {} } if {$OK_count == 0} { puts “No probes run - exiting.” dtrace close $dhandle exit } # }}} # Simple to show the output {{{ puts “CPU\tProbe” proc callback {probe cpu id args} { puts “$cpu\t$probe” } # }}} # Go go go! {{{ dtrace go $dhandle probe_desc {callback {}} set counter 10 while {$counter} { dtrace process $dhandle 1 set counter [expr {$counter - 1}] } dtrace stop $dhandle dtrace close $dhandle # }}} {/geshi}
Łatwo zauważyć dwie rzeczy:
- Kolorowanie GeSHi działa
- Program ten pozwala interaktywnie (w CLI) wpisać kod skryptów D do uruchomienia.
A ja wracam do pracy.
Komentarze
- zdz (2008-08-06 20:27:45): A tak w zasadzie to co Ty piszesz? Z tego co zrozumiałem kod, bilbiotekę umożliwiająca korzystanie z DTrace w programach TCLowych. Z początku wydawało mi się, że chodzi o naszpikowanie TCLa sodami DTraceowymi (tak jak Pythona, PHP, JavaScript w Mozilli) i umożliwienie śledzenia skryptów TCLowych.
- Remigiusz ‘lRem’ Modrzejewski (2008-08-06 21:30:30): Zgadłeś. Tcl już jest naszpikowany sondami DTrace’owymi. Choć przewidywałem, że w razie nadmiaru czasu napiszę jedną sondę… Co jednak nie nastąpi.