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

Can an application programmatically generate its own stacktrace?

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

谢谢。


例如,在gcc和gnu libcc库中,可以使用backtrace()

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

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

(这显然是一个依赖平台的问题。)

(在相关注释中,还存在自反汇编库。)


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

它产生了漂亮的Java类堆栈跟踪,具有函数名和源位置。如。:

1
2
3
4
at c(stack_trace.c:95)
at b(stack_trace.c:100)
at a(stack_trace.c:105)
at main(stack_trace.c:110)

libunwind应该在windows和mac上工作,但是libdwfl是Linux和elf特有的。


伊恩·兰斯·泰勒的libbacktrace就是这样做的。它处理堆栈展开,并为DWARF调试符号提供支持。

https://github.com/erwanlegrand/libbacktrace

但它只支持小精灵。