我想看看在我的用户空间 C99 程序中调用了哪些函数以及调用的顺序。另外,给出了哪些参数。
我可以用 DTrace 做到这一点吗?
例如对于程序
int g(int a, int b) { puts("I'm g"); }
int f(int a, int b) { g(5+a,b);g(8+b,a);}
int main() {f(5,2);f(5,3);}
我想看到一个文本文件:
main(1,{"./a.out"})
f(5,2);
g(10,2);
puts("I'm g");
g(10,5);
puts("I'm g");
f(5,3);
g(10,3);
puts("I'm g");
g(11,5);
puts("I'm g");
我不想修改我的源代码,而且程序真的很大——有 9000 个函数。
我有所有来源;我有一个编译了调试信息的程序,gdb 能够在回溯中打印函数参数。
DTrace 可以解决这个任务吗?
我的操作系统是 BSD、Linux、MacOS、Solaris 之一。我更喜欢 Linux,但我可以使用任何列出的操作系统。