应用程序可以以编程方式生成自己的堆栈跟踪吗?

vy3*_*y32 14 c stack-trace

我有一个用C语言编写的程序,可以在Linux,MacOS和Windows上运行.有没有办法可以调用函数并生成堆栈跟踪?这对我来说非常有用.理想情况下,我想在所有三个平台上都这样做,但Linux是最重要的.(Windows正在通过mingw编译.)

谢谢.

Ker*_* SB 7

例如,在GCC和GNU libcC库中,您可以使用backtrace().

正如@slugonamission建议的那样,Windows提供CaptureStackBackTrace()- 谢谢!

其他平台可能提供类似的功能.

(这显然是一个与平台有关的问题.)

(在相关说明中,还存在自解析库.)


Pio*_*zmo 6

我正在使用此代码生成调试堆栈跟踪.它使用libunwind来获取堆栈跟踪,使用libdwfl来读取调试信息.

它产生类似Java的堆栈跟踪,包含函数名称和源位置.例如.:

at c(stack_trace.c:95)
at b(stack_trace.c:100)
at a(stack_trace.c:105)
at main(stack_trace.c:110)
Run Code Online (Sandbox Code Playgroud)

libunwind应该适用于Windows和Mac,但libdwfl是Linux和ELF特有的.