2010-01-14 44 views
4

實現異常堆棧跟蹤的最佳方式是什麼?異常stacktrace

我發現某種使用uncaught_exception()的解決方案,但它需要爲每個函數添加一些代碼。

我需要的東西,在Linux和Windows

+0

什麼樣的輸出你想看嗎? – 2010-01-14 13:53:32

+0

Dupe:http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes – 2010-01-14 14:00:34

+0

這不是同一個問題。當我的應用程序崩潰時,我不想要堆棧跟蹤,我想要一個附加到我的異常的堆棧跟蹤,就像e.printStackTrace();在Java中 – 2010-01-14 14:05:27

回答

4

我不認爲有一個跨平臺的方式做到這一點對GCC的工作。在Windows上,查看StackWalk方法;在Linux上,男人回溯。這將獲得信息;這取決於你的格式。

4

我不確定用於展開堆棧的可靠跨平臺方法存在。

我工作過的所有平臺/體系結構都提供了一種在發生異常時將堆棧放到堆棧並將地址與函數名稱匹配的方法。這些都不是可移植的,但報告框架可以編寫成可移植的,實際堆棧行走代碼保持平臺特定(Windows上的StackWalk或Linux上的回溯)。

您可以查看libunwind項目。我從來沒有用過或看過這個,所以它可能不是你想要的。

2

我實現了一些將當前堆棧跟蹤生成爲一個字符串的代碼;如果您有興趣,請查看從this file的第1220行開始的GetStackTrace()函數。該功能在Linux,MacOS/X和Windows下運行(請注意,我從here中借用Windows實現,並且需要大量的代碼才能在Windows下實現此功能.... bleah)