2011-10-03 46 views
9

我需要一種方法來在調試日誌中記錄函數堆棧跟蹤以幫助我診斷缺陷。問題是我需要使用C++在Windows和Linux上實現這個功能。用於日誌記錄的庫在運行時調用堆棧(Windows/Linux)

一個小小的研究後,我發現:

  • 對於Windows實現,我可以使用StackWalk64 API函數和家人。
  • 在Linux下,我發現libunwind聽起來不錯。
  • 或者,我可以使用的glibc的backtrace

開始工作之前,我想要一些意見,如果這是正確的做法,並詢問是否有一個已經寫的多平臺庫,可以幫助。我懷疑我不是第一個需要這個的程序員。 :)

+0

+1對於一個很好的問題很好的問道! –

回答

3

Google Breakpad爲您處理所有這些,如果你想從現場得到崩潰轉儲。

+1

崩潰轉儲包含更多信息,然後我需要。並應該進行後處理 - 這是一個很大的不便。我只需要將堆棧跟蹤作爲一個字符串或一個字符串數組。 – vlg789

+0

除非您願意隨應用程序一起發佈私有PDB,並且小型轉儲的大小約爲大型JPEG,否則您必須進行後期處理。 –

+0

運送私人PDB不是問題。 – vlg789

1

幾年前,我寫了這個:http://drdobbs.com/cpp/191100567

基本上一些宏記錄在堆棧展開時發生異常的地方被拋出。

該框架的更新版本可以在圖書館找到Imebra(http://imebra.com)

+0

你指的是FUNCTION_START/FUNCTION_END宏? – vlg789

+0

是的。他們捕捉並重新拋出並記錄異常的通過。 –