2010-02-11 110 views
5

大家好,我正在調試Mac OS 10.5上的C++應用程序。偶爾,我會做一些不好的事情,導致段錯誤或其他非法操作。這會導致應用程序掛起一段時間,並最終通過系統對話框通知崩潰。 「掛起」和對話之間的等待時間很重要;幾分鐘。如果我嘗試強制退出應用程序或從命令行執行任何操作,則什麼也不會發生。如果我從調試器(gdb)啓動應用程序,一旦發生崩潰,我會回到gdb提示符,並可以乾淨地退出過程。雖然gdb加載速度很慢,但這並不理想。在Mac OS X上調試和查殺應用程序?

反正你們可以推薦一下嗎?有沒有辦法在OS X中禁用崩潰報告機制?

謝謝。

更新1: 這裏是從XCode執行中遺留下來的殭屍。顯然,xcode無法正常阻止他們。

 1 [email protected]:~$ ps auxw|grep -i Reader 
    2 eightieight 28639 0.0 0.0 599828 504 s004 R+ 2:54pm 0:00.00 grep -i reader 
    3 eightieight 28288 0.0 1.1 1049324 45032 ?? UEs 2:46pm 0:00.89 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    4 eightieight 28271 0.0 1.1 1049324 45036 ?? UEs 2:45pm 0:00.89 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    5 eightieight 28146 0.0 1.1 1049324 44996 ?? UEs 2:39pm 0:00.90 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    6 eightieight 27421 0.0 1.1 1049328 45024 ?? UEs 2:29pm 0:00.88 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    7 eightieight 27398 0.0 1.1 1049324 45044 ?? UEs 2:28pm 0:00.90 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
+0

您正在使用的XCode?如果是這樣,你不應該看到崩潰記者對話框。另外,你在構建一個基於GUI的應用程序還是僅僅是一個控制檯應用程序? 編輯:順便說一下,如果你正在使用的XCode,如果你同時在XCode中運行的GUI應用程序得到一個錯誤EXEC_BAD_ACCESS,你可以簡單地按停止圖標立即終止正在運行的應用程序。 – Tom 2010-02-23 05:46:43

+0

是的,如果我在XCode或gdb中運行我的應用程序,一切正常。當我遇到段錯誤時,應用程序會退回調試器,一切都很好。但是,如果我從控制檯運行應用程序,它似乎永遠掛起。 – EightyEight 2010-02-23 16:32:19

+0

你是如何調用應用程序?通常情況下,如果某個應用程序出現故障,遊戲結束,則該過程已停止。但是,如果你已經設法從其他環境調用它,那麼該進程的某些資源可能會保持打開狀態,並且它還不能放手,並且你需要等待父進程首先執行某些操作(可能會有問題檢測出錯了)。 – 2010-02-24 23:30:56

回答

1

有自帶的Xcode中CrashReporterPrefs app(搜索它帶有Spotlight,應在/Developer/Applications/Utilities)。這可以設置爲服務器模式以禁用應用程序「意外退出」對話框。

這裏的another suggestion

sudo chmod 000 /System/Library/CoreServices/Problem\ Reporter.app 

要重新啓用,請執行以下操作:

sudo chmod 755 /System/Library/CoreServices/Problem\ Reporter.app 

這可能是應用程序被傾倒了大量的核心文件 - 你可能會注意到影響儘管可用的磁盤空間。您可以使用

sudo sysctl -w kern.coredump=0 

通過設置=1重新激活。

+0

是的,我已經試過了。該對話框不再彈出,但仍然有延遲.. – EightyEight 2010-02-11 21:16:38

+0

我不會建議'chmod'方法。修改系統文件或權限正在尋求麻煩。 Prefs應用會根據你的要求做。 – gavinb 2010-02-25 11:40:54

+0

@gavinb - 同意;重新排序的建議。 – 2010-02-25 22:39:33

1

This article從osxdaily.com說,你只需要鍵入:

defaults write com.apple.CrashReporter DialogType none

終端。不知道這是否能解決延遲問題。

1

我終於想通了。

在/系統/圖書館/ CoreServices:

 
---------- 1 root wheel 56752 11 Aug 2009 ReportPanic 

那一定是從我的較早嘗試禁用惱人的報告對話框。活到老,學到老。 :]