C Linux跟踪所有函数调用,包括库内的函数

时间:2012-05-17 11:25:45

标签: c linux

我有像

这样的程序
int main()
{
  char *ptr = malloc(2);
  free(ptr);
}

所以我只想跟踪程序内发生的所有函数调用,直到系统调用

喜欢

malloc
   |____ libc( sme_fn)
           |
           |__sme_system_call

你能告诉我某种方法吗?

2 个答案:

答案 0 :(得分:2)

如您所知,“系统调用”有两种形式:

  • 直接调用操作系统(“打开”,“关闭”,“分叉”,“执行”,“退出”等)

  • 平台的标准C运行时函数(“printf()”,“malloc()”,“free()等”

您可以使用“strace”查看前者。

您可以使用gdb查看(至少调用)后者。

您可以直接从源代码中查看完整的实现和所有内部结构:

最后,如果您遇到“malloc()”问题,“valgrind”是(非常有用的)非常非常有用的工具。

答案 1 :(得分:1)

如果您正在使用gcc,请使用-pg进行编译,然后使用gprof命令。

或者,如果您使用的是Linux,则可以使用oprofile执行类似操作而无需重新编译。

这两个工具都应该为您提供调用图表,这正是您所需要的。