2012-04-28 344 views
4

我有一個Mac應用商店應用程序,當它崩潰時就會悄然消失。它沒有顯示CrashReporter對話框,讓用戶有機會向Apple報告崩潰。CrashReporter對話框在Mac應用程序崩潰時不顯示

我在多臺機器上看到相同的行爲。有什麼已知的原因爲什麼會發生這種情況?

根據TN2123

此外,如果崩潰的程序正在運行的登錄界面 用戶,CrashReporter始終會向用戶呈現一個對話框,要求他們 是否要提交bug向Apple報告

「以登錄的GUI用戶身份運行」是什麼意思?窗口是否必須可見?

更新:

我正在讀manpage for ReportCrash,並發現如下:

對於應用程序崩潰(但不包括後臺進程崩潰) ReportCrash將顯示一個對話框,通知用戶該 應用程序意外退出並提供重新打開應用程序 或將報告發送給Apple。對於開發人員,可以使用作爲開發人員工具一部分安裝的 /Developer/Applications/Utilities/CrashReporterPrefs.app( )來調整此 對話框的行爲。

我運行了CrashReporterPrefs並將我的CrashReporter模式更改爲Developer。當我運行應用程序並觸發崩潰時,顯示CrashReporter對話框!

所以我想現在的問題是:「應用程序」崩潰和「後臺進程」崩潰之間的區別是什麼?

+0

該應用調用'exit()'還是'_exit()'?它實際上是否會退出,所以這是一個受控關機而不是崩潰?發生這種情況時,有沒有寫入控制檯日誌? – 2012-04-28 03:23:49

+0

@KenThomases - 這絕對是一個崩潰,因爲崩潰報告是生成的。系統日誌顯示保存的崩潰報告。我遇到的問題只是CrashReporter對話框不顯示,這意味着用戶永遠不會有機會提交報告。 – pepsi 2012-04-28 03:42:48

+0

這是僅當你在Xcode下運行它時,還是當你從Finder自己運行應用程序時? – 2012-04-28 06:19:46

回答

2

如果您的應用程序使用LSUIElement或LSBackgroundOnly,這是確定是否顯示Crash Reporter的「後臺進程」。 (其他「後臺進程」包括UNIX-land守護進程,例如Apache Web服務器,以及從SSH或telnet連接開始的進程。)