首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C或C++中的打印调用堆栈

C或C++中的打印调用堆栈
EN

Stack Overflow用户
提问于 2018-04-17 10:09:02
回答 2查看 0关注 0票数 0

每次调用某个函数时,有没有办法在C或C ++的运行进程中转储调用堆栈?我想到的是这样的:

代码语言:javascript
复制
void foo()
{
   print_stack_trace();

   // foo's body

   return
}

或者像这样的东西:

代码语言:javascript
复制
int main (void)
{
    // will print out debug info every time foo() is called
    register_stack_trace_function(foo); 

    // etc...
}

在那里register_stack_trace_function放置某种内部断点,这将导致每次foo调用时都会打印堆栈跟踪。

在一些标准的C库中是否存在这样的事情?

我正在使用GCC在Linux上工作。

EN

回答 2

Stack Overflow用户

发布于 2018-04-17 18:26:26

对于仅用于linux的解决方案,使用backtrace(3),它仅返回一个数组void *(实际上每个指向相应堆栈帧的返回地址)。要将这些转换为使用的东西,有backtrace_symbols(3)

票数 0
EN

Stack Overflow用户

发布于 2018-04-17 19:53:40

没有标准的方法来做到这一点。对于Windows,DbgHelp库提供了该功能

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档