我想编写一个调试打印功能,可以打印 LINE , FILE , func 以及其他一些内容。扭曲是因为我想根据调用堆栈中的深度自动缩进打印输出,所以像
main.c:55:main()
functions.c:33:function1()
functions.c:133:function2()
functions.c:33:function1()
functions.c:33:function1()
如果function1立即返回,并且function2两次调用function1。
我想这可以通过使用全局变量来完成,该变量在每次调用函数时手动递增,并在返回时递减,但这需要相当多的代码库重新执行。我想知道是否有更简单的方法吗?
我不介意解决方案是否是非标准C,只要它是标准GNU。
答案 0 :(得分:3)
您可以使用Gcc中的代码性能分析选项来完成此操作。 https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Code-Gen-Options.html
<强> -finstrument函数强>
生成用于进入和退出函数的检测调用。在功能输入之后和功能之前 退出时,将调用以下分析函数 当前函数的地址及其调用站点。 (在某些平台上, __builtin_return_address在当前函数之外不起作用,因此调用站点信息可能无法用于分析 否则就是其他功能。)
void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);