2011-12-30 35 views
3

在Mac OS,導致信號(通過一個空指針異常或類似的東西)的應用程序通常顯示標準的Mac OS崩潰對話框,包括髮生的信號,其中一個不錯的堆棧跟蹤。如果您有崩潰報告,這可以讓您輕鬆找出代碼中發生問題的位置並對其進行修復。的Mac OS信號處理/崩潰報告

mac os crash report

此堆棧跟蹤是很容易查找並找出其中的執行是在那裏墜毀。

然而,標準的Mac OS崩潰報告提示用戶將其發送到蘋果公司,因爲用戶會只需按下按鈕,我們假定我們得到了崩潰報告的時候,其實我們並沒有這是沒有用的。我想改爲使用堆棧跟蹤來顯示自己的崩潰報告,告訴用戶將它發送給我,或者自動將其提交給Web窗體或類似的東西。

如何獲得像這樣的信號的堆棧跟蹤?我試過以下:

  • 安裝未捕獲的異常處理程序 - 沒有變化,我仍然得到常規的Mac OS崩潰對話框。

  • @try /節目圍繞@catch - 沒有改變,我仍然得到正規的Mac OS崩潰對話框。

  • 使用signal()在調用時會拋出異常來安裝信號處理程序 - 我可以捕獲異常並從中獲取調用堆棧,但堆棧跟蹤顯示信號處理程序,並且比我看到的堆棧跟蹤在上面的Mac OS錯誤中。

enter image description here

線在此圖像中編號3是在信號處理函數被調用 - 它不會產生相同的堆棧跟蹤標準的崩潰報告,即使你忽視了明顯的「這裏的我拋出一個異常「位。

我怎麼能複製一個標準的崩潰報告它讓我從中產生的信號調用堆棧的行爲?

回答

3

我強烈建議PLCrashReporter。它處理未捕獲的異常和致命信號,並生成類似於Apple崩潰對話框中看到的崩潰報告。您可以通過各種服務進行崩潰分析(按版本和常見調用堆棧分組)。或者你可以自己運行一個服務器。一種開源服務是QuicyKit

+0

PLCrashReporter有得到正確的堆棧幀的來源,但在Mac OS,最好讓系統爲你做,然後發送文件回到自己在下次啓動。我有一個框架可以使用Mail.app發送無需運行自己的服務器的報告:https://gitlab.com/alfwatt/reportwindow – alfwatt 2016-07-18 19:04:24