好吧,我正在尝试探测我自己在SDT标记上的应用。我编写了一个systemtap脚本来探测它,但是systemtap在第5遍之后显示没有错误,然后在第5遍(开始运行)之后,它继续无所事事。这是我的带有SDT标记的C程序:
foo.c:
#include <sys/sdt.h>
#include <stdio.h>
int main(void)
{
printf("Before Marker\n");
DTRACE_PROBE(user_app, foo_start);
printf("After Marker\n");
return 0;
}
我的systemtap脚本是:
probe_foo.stp
probe process("./user_app").mark("foo_start")
{
exit();
}
我运行的命令是:
stap -v probe_foo.stp
这就是我得到的:
Pass 1: parsed user script and 98 library script(s) using 217528virt/36580res/2976shr/34316data kb, in 190usr/30sys/222real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) using 218596virt/38164res/3424shr/35372data kb, in 10usr/0sys/13real ms.
Pass 3: using cached /root/.systemtap/cache/a6/stap_a6e78dea575657695c4456347007229d_990.c
Pass 4: using cached /root/.systemtap/cache/a6/stap_a6e78dea575657695c4456347007229d_990.ko
Pass 5: starting run.
之后它无限期地等待。 我的内核版本是3.8.0,我使用的是fedora 18。
答案 0 :(得分:4)
这看起来很正常。没有迹象表明你曾经启动过./user_app二进制文件,因此systemtap探针永远不会命中,因此它没有任何理由退出()。
尝试改为
stap -t probe_foo.stp -c ./user_app
其中'-c ./user_app'将运行给定的应用程序(并限制探测它,而不是系统范围内),' - t'将在脚本关闭时提供总体探测命中次数/次数。 (由于您只有一个探针执行exit(),因此该报告将是微不足道的。)