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来计算包含该地址的真实函数. 您无法通过这种方式获取函数参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |