summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.examples/general
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2010-03-07 21:13:39 -0500
committerFrank Ch. Eigler <fche@elastic.org>2010-03-07 21:14:03 -0500
commit14f0bb1853f944681823fbc72460f6eac6b58f2d (patch)
treec67abd3e72cf104386ec06298786d72bb4cab51b /testsuite/systemtap.examples/general
parent01c829fe9f5a670ba37a970c66723e8737fe0287 (diff)
downloadsystemtap-steved-14f0bb1853f944681823fbc72460f6eac6b58f2d.tar.gz
systemtap-steved-14f0bb1853f944681823fbc72460f6eac6b58f2d.tar.xz
systemtap-steved-14f0bb1853f944681823fbc72460f6eac6b58f2d.zip
new sample: varwatch
Diffstat (limited to 'testsuite/systemtap.examples/general')
-rw-r--r--testsuite/systemtap.examples/general/varwatch.meta6
-rw-r--r--testsuite/systemtap.examples/general/varwatch.stp28
2 files changed, 34 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/general/varwatch.meta b/testsuite/systemtap.examples/general/varwatch.meta
new file mode 100644
index 00000000..3d876bb1
--- /dev/null
+++ b/testsuite/systemtap.examples/general/varwatch.meta
@@ -0,0 +1,6 @@
+title: Watch a variable changing value in a thread.
+name: varwatch.stp
+keywords: monitoring
+description: This script places a set of probes (specified by $1), each of which monitors the state of some context $variable expression (specified by $2). Whenever the value changes, with respect to the active thread, the event is traced.
+test_check: stap -wp4 varwatch.stp 'kernel.statement("do_sys_open@fs/open.c:*")' '$$vars'
+test_installcheck: stap -w varwatch.stp 'kernel.statement("do_sys_open@fs/open.c:*")' '$$vars' -c "sleep 0.2"
diff --git a/testsuite/systemtap.examples/general/varwatch.stp b/testsuite/systemtap.examples/general/varwatch.stp
new file mode 100644
index 00000000..845ca166
--- /dev/null
+++ b/testsuite/systemtap.examples/general/varwatch.stp
@@ -0,0 +1,28 @@
+#! /usr/bin/env stap
+
+global var, varerr
+
+probe $1 {
+ t=tid() # or t=0 for thread-agnostic checking
+ if (@defined($2)) {
+ try {
+ newvar = $2;
+ if (var[t] != newvar) {
+ printf("%s %s changed in thread %d from %s to %s\n", pp(), @2, t, sprint(var[t]), sprint(newvar));
+ var[t] = newvar;
+ }
+ } catch { varerr ++ } # error during $2 resolution or perhaps var[] assignment
+ }
+}
+
+probe kprocess.release { # if using per-thread checking
+ delete var[$p->pid] # thread
+}
+
+probe never {
+ var[0]="" # assigns a type to var in case no probes match $1 above
+}
+
+probe error,end {
+ if (varerr) printf("%s %s access errors: %d", @1, @2, varerr);
+}