diff options
Diffstat (limited to 'stapex.3stap.in')
-rw-r--r-- | stapex.3stap.in | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/stapex.3stap.in b/stapex.3stap.in new file mode 100644 index 00000000..8d02fc5c --- /dev/null +++ b/stapex.3stap.in @@ -0,0 +1,126 @@ +.\" -*- nroff -*- +.TH STAPEX 3stap @DATE@ "Red Hat" +.SH NAME +stapex \- systemtap examples + +.\" macros +.de SAMPLE +.br +.RS +.nf +.nh +.. +.de ESAMPLE +.hy +.fi +.RE +.. + +.SH LANGUAGE BASICS +These examples give a feel for basic systemtap syntax and +control structures. + +.SAMPLE +global odds, evens + +probe begin { + # "no" and "ne" are local integers + for (i=0; i<10; i++) { + if (i % 2) odds [no++] = i + else evens [ne++] = i + } + delete odds[2] + delete evens[3] + exit () +} + +probe end { + foreach (x+ in odds) { + printf ("odds[%d] = %d\n", x, odds[x]) + } + foreach (x in evens\-) { + printf ("evens[%d] = %d\n", x, evens[x]) + } +} +.ESAMPLE +This prints: +.SAMPLE +odds[1] = 1 +odds[3] = 5 +odds[4] = 7 +odds[5] = 9 +evens[5] = 8 +evens[4] = 6 +evens[2] = 2 +evens[1] = 0 +.ESAMPLE +Note that all variables types are inferred, and that all locals +and globals are automatically initialized. + +.PP +This script prints the primes between 0 and 49. +.SAMPLE +function isprime (x) { + if (x < 2) return 0 + for (i=2; i<x; i++) { + if (x % i == 0) return 0 + if (i * i > x) break + } + return 1 +} +probe begin { + for (i=0; i<50; i++) + if (isprime (i)) printf("%d\n", i) + exit() +} +.ESAMPLE + +.PP +This script demonstrates recursive functions. +.SAMPLE +function fibonacci(i) { + if (i < 1) error ("bad number") + if (i == 1) return 1 + if (i == 2) return 2 + return fibonacci (i\-1) + fibonacci (i\-2) +} +probe begin { + printf ("11th fibonacci number: %d\n", fibonacci (11)) + exit () +} +.ESAMPLE +Any larger number may exceed the MAXACTION or MAXNESTING +limits, and result in an error. + + +.SH PROBING + +To trace entry and exit from a function, use a pair of probes: +.SAMPLE +probe kernel.function("sys_mkdir") { println ("enter") } +probe kernel.function("sys_mkdir").return { println ("exit") } +.ESAMPLE + +To list the probeable functions in the kernel, use the listings mode. +.SAMPLE +% stap \-l \[aq]kernel.function("*")\[aq] +.ESAMPLE + +To list the probeable functions and local variables in the kernel, use another listings mode. +.SAMPLE +% stap \-L \[aq]kernel.function("*")\[aq] +.ESAMPLE + +.SH MORE EXAMPLES + +Larger examples, demos and samples can be found in +@prefix@/doc/systemtap*/examples, each example comes with either a .txt +or .meta file explaining what the example, sample or demo does and how +it is ordinarily run. + +.SH SEE ALSO +.BR @prefix@/doc/systemtap*/examples +.IR stap (1) +.IR stapprobes (3stap) +.IR stapfuncs (3stap) + |