File: stapex.3stap

package info (click to toggle)
systemtap 3.0-6~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 30,496 kB
  • sloc: ansic: 57,403; cpp: 57,007; exp: 36,587; sh: 10,151; xml: 7,771; perl: 2,241; python: 1,364; tcl: 1,300; makefile: 825; java: 148; lisp: 105; awk: 94; asm: 91; sed: 16
file content (135 lines) | stat: -rw-r--r-- 2,586 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
.\" -*- nroff -*-
.TH STAPEX 3stap
.SH JMÉNO
stapex \- příklady

.\" macros
.de SAMPLE

.nr oldin \\n(.i
.br
.RS
.nf
.nh
..
.de ESAMPLE
.hy
.fi
.RE
.in \\n[oldin]u

..

.SH ZÁKLADY SKRIPTOVACÍHO JAZYKA
Následující příklady demonstrují základy syntaxe a řídicích struktur
skriptovacího jazyka systemtapu.

.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
Výstupem výše uvedeného skriptu bude:
.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
Poznamenejme, že datové typy všech proměnných jsou automaticky odvozené, a že
všechny globální proměnné jsou automaticky inicializovány.

.PP
Následující skript vypíše prvočísla mezi 0 a 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
Tento skript je ukázkou použití rekurzivních funkcí.
.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
Při pokusu o generování větších čísel bychom narazili na limity MAXACTION,
nebo MAXNESTING a výsledkem by byla chyba.

.SH SONDOVÁNÍ

Pro sledování vstupu do funkce a výstupu z ní použijte následující pár sond:
.SAMPLE
probe kernel.function("sys_mkdir") { println ("enter") }
probe kernel.function("sys_mkdir").return { println ("exit") }
.ESAMPLE

Pro vypsání jaderných funkcí do kterých lze vložit sondu použijte režim
výpisu -l:

.SAMPLE
% stap \-l \[aq]kernel.function("*")\[aq]
.ESAMPLE

Pro výpis jaderných funkcí a v nich přístupných lokálních proměnných
použijte režim výpisu -L:

.SAMPLE
% stap \-L \[aq]kernel.function("*")\[aq]
.ESAMPLE

.SH VÍCE PŘÍKLADŮ

Adresář s příklady je zmíněn v manuálové stránce stappaths (7), případně online
na adrese:
.nh
.BR http://sourceware.org/systemtap/examples/
.hy

.SH VIZ TÉŽ
.nh
.nf
.IR stap (1)
.IR stapprobes (3stap)
.IR stappaths (7)