我正在尝试监视系统范围内的库调用。我编写了这个脚本来跟踪库调用libguestfs
:
probe begin {
printf("ok\n")
}
probe process("/usr/lib64/libguestfs.so.0.471.0").function("*") {
print_usyms(ubacktrace())
}
然后,我将其保存为 test.stp 并运行“sudo stap test.stp”。我需要一些使用这些函数调用的进程,以便我可以拦截它们。因此,我使用了一个简单的程序,名为libguestfs 测试工具这是 libguestfs 包的一部分。它出现段错误!如果我不运行 stap,它不会出现段错误。
所以基本上我有两个问题:
1-为什么会发生这种情况?我做错了什么吗?
2-我需要使用 ltrace 功能,但在系统范围内。对于每个库调用,我需要获取调用的顶级 API 以及调用该函数的进程的 pid。我尝试使用 stap 但似乎它有一些不稳定问题...你有什么替代方案吗?
ps:我使用CentOS 7,内核为3.12.2.3