我正在寻找像ltrace或strace这样的工具,它可以跟踪可执行文件中的本地定义函数.ltrace仅跟踪动态库调用,而strace仅跟踪系统调用.例如,给定以下C程序:
#include <stdio.h>
int triple ( int x )
{
  return 3 * x;
}
int main (void)
{
  printf("%d\n", triple(10));
  return 0;
}
运行程序ltrace将显示调用,printf因为这是一个标准库函数(我的系统上是一个动态库),strace并将显示启动代码,用于实现printf的系统调用和关闭代码的所有系统调用,但我想要一些能告诉我函数triple被调用的东西.假设优化编译器没有内联本地函数,并且二进制文件没有被剥离(符号被删除),是否有工具可以做到这一点?
编辑
几点澄清:
我们如何列出应用程序中调用的所有函数.我尝试使用GDB,但它的回溯列表只能到主函数调用.
我需要更深的列表,即主函数调用的所有函数的列表以及从这些调用的函数调用的函数等等.
有没有办法在gdb中得到它?或者你能给我一些关于如何获得这个的建议吗?
目前使用VS2005在Windows上编码(但不介意知道是否有其他编译器和平台的选项.我最感兴趣的是OSX作为替代平台.)我有一个C(没有C++)程序,我想要做以下......
给定一个功能,比如......
int MyFunction(int myparam)
{
   // Entry point.
   ...
   // Exit point.
   return 1;
}
我想在入口点和出口点放一段代码.但是,我宁愿不必修改已经存在的100个函数.有没有办法定义编译器将为我的所有函数注入的函数入口和退出代码,而无需全部修改它们?
我发现或尝试过的大多数解决方案都需要我编辑每一个功能,这是很多工作.我认为其他人必须已经打过这样的东西并解决了它.在我怀疑的这个要求中,我不能独一无二.