2011-11-02 39 views
4

我想以与在gdb中完成的格式类似的格式从Linux中的C++程序转储回溯。我试图使用backtrace()和backtrace_symbols()函数来实现此目的。这些返回的函数名称和偏移量。我可以使用__cxa_demangle()函数来获取可读的函数名称。在C++中打印完全回溯

是否有任何方法获取文件/行位置,因为它是由gdb完成的?

+1

重复:http://stackoverflow.com/questions/4636456/stack-trace-for-c-using-gcc其中包括在问题的解决方案 – rve

回答

5

How it's better to invoke gdb from program to print its stacktrace?`

了Methode#4,显示了一种方法来获取文件名和行。但使用外部程序..

+0

如果你不介意真的执行GDB来获得回溯,你可以看看Warzone 2100项目是如何实现的。我们基本上使用这些技术的组合来获得GDB品质的输出,并逐渐回退到更简单的策略(例如,如果GDB不可用或者libc不提供backtrace())。 (它的要点在于https://github.com/Warzone2100/warzone2100/blob/master/lib/exceptionhandler/exceptionhandler.cpp) – Giel