2010-04-27 107 views
2

我正在編譯* nix上的C++,我希望在程序中的任意點處生成堆棧轉儲 b)在任何信號期間,尤其是在SIGSEGV期間。谷歌告訴我,ptrace可能是工作的工具,但我找不到任何可以理解的步驟。獲取返回地址,是的,但是下一個返回地址呢?那麼在那個時候提取函數的符號名稱呢?與DWARF有什麼關係?使用ptrace生成堆棧轉儲

非常感謝,如果你能告訴我該從哪裏出發。

回答

2

如果您使用的是glibc,那麼GNU功能backtrace()backtrace_symbols()是執行此操作的最佳方法。無論如何,走棧是特定環境的,所以在每個平臺上使用不可移植的原生函數都沒有任何缺點。