2011-11-02 40 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