C中如何跟踪函数调用?

前端之家收集整理的这篇文章主要介绍了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&C++相关文章