gpt4 book ai didi

c - 在gcc中获取调用堆栈的深度

转载 作者:行者123 更新时间:2023-12-04 02:05:48 25 4
gpt4 key购买 nike

我想编写一个打印LINEFILEfunc 和其他一些东西的调试打印函数。不同之处在于我想根据打印输出在调用堆栈中的深度自动缩进打印输出,比如

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。

最佳答案

您或许可以使用 Gcc 中的代码分析选项来做到这一点。 https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Code-Gen-Options.html

-finstrument-functions
Generate instrumentation calls for entry and exit to functions. Just after function entry and just before function exit, the following profiling functions will be called with the address of the current function and its call site. (On some platforms, __builtin_return_address does not work beyond the current function, so the call site information may not be available to the profiling functions otherwise.)

void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);

关于c - 在gcc中获取调用堆栈的深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com