在 systemtap 中检查用户空间应用程序的局部变量时遇到问题。
我这样写一个test.c:
#include <stdio.h>
int func(int *p, int val)
{
printf("p=%p val=%d\n", p, val);
return 1;
}
int main()
{
int a = 7;
func(&a, a);
return 0;
}
并编译它-g
# gcc -g -o test test.c
Systemtap 可以看到func()
:的变量p
和val
# stap -L 'process("./test").function("func")'
process("/home/ryan/Public/test").function("func@/home/ryan/Public/test.c:3") $p:int* $val:int
所以我使用这个 stp 来观察变量:
# stap -e 'probe process("./test").function("func") {printf("%s(%p, %d)\n", probefunc(), $p, $val)}'
但是测试程序执行时结果中的局部变量不正确,它显示:
func(0x0, 0)
我正在使用 fedora19:
kernel-3.11.9-200.fc19.x86_64
systemtap-sdt-devel-2.3-1.fc19.x86_64
systemtap-2.3-1.fc19.x86_64
systemtap-client-2.3-1.fc19.x86_64
systemtap-devel-2.3-1.fc19.x86_64
systemtap-runtime-2.3-1.fc19.x86_64
gcc-4.8.2-7.fc19.x86_64
有人可以遇到这个问题或给我一个解决方案吗?