C中如何跟踪函数调用?

在不修改代码的情况下,如何调用某些函数(在下面的示例中称为func100)时,如何跟踪调用哪些函数以及什么参数.我想输出如下:
enter func100(p1001=xxx,p1002=xxx)
        enter func110(p1101=xxx,p1102=xxx)
        exit  func110(p1101=xxx,p1102=xxx)
        enter func120(p1201=xxx,p1202=xxx,p1203=xxx)
                enter func121(p1211=xxx)
                exit  func121(p1211=xxx)
        exit  func120(p1201=xxx,p1203=xxx)
exit  func100(p1001=xxx,p1002=xxx)

这是可行吗或者最少修改代码解决方案是什么?

解决方法

如果使用gcc,可以使用-finstrument-functions编译标志.
每当函数进入/退出时,它会添加调用两个函数__cyg_profile_func_enter和__cyg_profile_func_exit的代码.

你需要实现这些功能,做你想要的.确保编译它们没有标志,或使用属性((no_instrument_function)),所以他们不会尝试调用自己.

函数的第二个参数是指向调用站点的指针(即调用函数内的返回地址).你可以打印它与%p,但它将有点难以使用.您可以使用nm来计算包含该地址的真实函数.

您无法通过这种方式获取函数参数.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...