2011-02-09 175 views
6
Program received signal: 「EXC_BAD_ACCESS」. 
[Switching to process 388] 
kill 
error while killing target (killing anyway): warning: error on line 2179 of "/SourceCache/gdb/gdb-1472/src/gdb/macosx/macosx-nat-inferior.c" in function "macosx_kill_inferior_safe": (os/kern) failure (0x5x) 
quit 

The Debugger has exited with status 0.(gdb) 
+0

絕對是一個非常真實的問題;我已經看到了類似這樣的情況,這只是關於線索的全部內容。堅強。 – bbum 2011-02-09 22:01:05

回答

23

編程接收信號: 「EXC_BAD_ACCESS」。 [切換到 過程388]殺錯誤而殺死 目標(殺害反正):警告: 誤差線2179的 「/SourceCache/gdb/gdb-1472/src/gdb/macosx/macosx-nat-i​​nferior.c 「 在功能 」macosx_kill_inferior_safe「:(OS /克恩) 失敗(0x5x)退出

記下誤差; gdb已經墜毀。這可能是由於應用程序崩潰導致的,但是這些特定消息對於調試真正的問題肯定沒有用處。

而且,更有可能的是,實際的崩潰具有什麼也沒有與過度釋放對象有關。也許如此,但可能不會。

通常情況下,當GDB以這種方式崩潰時,這是因爲你拋棄了堆或堆棧的方式,gdb跳過了腐敗試圖弄清楚發生了什麼。或者你的應用程序進入了一個狀態,gdb不能再與它進行通信(這可能是這裏給出的崩潰位置的情況)。

在這種情況下,有些事情嘗試:

  • 使用最新的開發工具?如果不是的話,那麼也應該從乾淨的地方重建你的應用程序。

  • 可以在模擬器和設備上重現崩潰嗎?如果是這樣,它可以在一個適當的調試,但不是另一個?

  • 如果您在沒有調試器的情況下運行該應用程序,是否可以讓它崩潰然後從設備中提取崩潰日誌?

  • 在調試和非調試版本之間行爲會發生變化嗎?這可能會嚴重影響內存損壞。

  • 這是否剛剛開始發生?如果是這樣,你最近改變了什麼?

想到另一個把戲;

  • 嘗試設置MallocScribble環境變量。這將在分配/釋放時將值寫入內存中,並且通常至少會導致內存損壞相關的崩潰者早期崩潰或與之不同以捕獲它。
1

EXC_BAD_ACCESS通常意味着您試圖訪問不存在的東西了。我們需要你的堆棧轉儲,並可能需要一些代碼來幫助你弄明白。

+0

我該怎麼做? – testndtv 2011-02-09 18:57:50

+1

EXC_BAD_ACCESS僅表示有時;有時這意味着你偶然發現了內存不正常。而且,在這種情況下,調試器崩潰意味着原始應用程序中的崩潰可能不是典型的保留/釋放問題。 – bbum 2011-02-09 21:13:21

+0

調試器爲什麼會崩潰,可能會出錯的錯誤不是源於操作代碼中的錯誤? – jakev 2011-02-09 21:17:35

0

引用同事「某處出錯了」。

這意味着您試圖訪問不再有效的指針。也許你忘了保留一個對象,或者多次釋放它?