加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中如何跟踪函数调用?

发布时间:2020-12-16 06:02:29 所属栏目:百科 来源:网络整理
导读:在不修改源代码的情况下,如何调用某些函数(在下面的示例中称为func100)时,如何跟踪调用哪些函数以及什么参数.我想输出如下: enter func100(p1001=xxx,p1002=xxx) enter func110(p1101=xxx,p1102=xxx) exit func110(p1101=xxx,p1102=xxx) enter func120(p120
在不修改源代码的情况下,如何调用某些函数(在下面的示例中称为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来计算包含该地址的真实函数.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读