每次调用某个函数时,有没有办法在C或C ++的运行进程中转储调用堆栈?我想到的是这样的:
void foo()
{
print_stack_trace();
// foo's body
return
}
或者像这样的东西:
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上工作。
发布于 2018-04-17 18:26:26
对于仅用于linux的解决方案,使用backtrace(3),它仅返回一个数组void *
(实际上每个指向相应堆栈帧的返回地址)。要将这些转换为使用的东西,有backtrace_symbols(3)。
发布于 2018-04-17 19:53:40
没有标准的方法来做到这一点。对于Windows,DbgHelp库提供了该功能
https://stackoverflow.com/questions/-100003280
复制相似问题