2017-04-25 54 views
0

我需要檢測應用程序崩潰的位置,我嘗試逐行調試,但突然間,調試器從「彙編代碼」(是專用名稱?)跳入崩潰,所以我不能告訴你究竟是什麼有問題的代碼。 我正在對Speech進行文本處理,並在發生崩潰時將我的應用程序記錄到靛藍中。 我怎樣才能讓這個日誌信息?:如何知道我的應用程序在哪裏崩潰,只有這個日誌信息?

TIMESTAMP Indigo[1675:621373] -[NSNull length]: unrecognized selector sent to instance 0x1a7c38ef8 
TIMESTAMP Indigo[1675:621373] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution. 
TIMESTAMP Indigo[1675:621373] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1a7c38ef8' 
*** First throw call stack: 
(0x181aeefd8 0x180550538 0x181af5ef4 0x181af2f4c 0x1819eed2c 0x181ad4ff4 0x181ad513c 0x187c28234 0x100162f8c 0x1001a2bd8 0x187f63114 0x187f6332c 0x187e1c6e0 0x187e18978 0x187e1834c 0x187dfcfbc 0x1001a55b0 0x100041da8 0x100041b8c 0x1000e7c4c 0x1820f81fc 0x18210fef8 0x1825bd804 0x182502760 0x1824f2b18 0x1825bfba0 0x1009bda10 0x1009c2b78 0x181a9d0c0 0x181a9acdc 0x1819cad94 0x183434074 0x187c83130 0x10002160c 0x1809d959c) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+2

調試器應該有一個異常的堆棧跟蹤。 Xcode肯定有。這將幫助您確定問題發生的位置。這是左側視圖之一,沒有Xcode在我面前準確地說出哪一個。 –

+0

嘗試了*異常斷點*? – Rikh

+0

請參閱http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1以瞭解如何調試崩潰。 – rmaddy

回答

2

你需要設置一個斷點objc_exception_throw感。 Xcode中有用於設置一些UI細微,但最簡單的方法來解釋這樣做沒有挖掘截圖,是在調試器控制檯輸入命令(在發生碰撞前):

b objc_exception_throw 

,然後當拋出無法識別的選擇器異常時,調試器將停止那裏,而不是等待異常導致crash-proper(堆棧不太有用)。

異常本身也是揭示。您正在將消息length發送到NSNull。我敢打賭,你已經收藏了一些物品,你認爲這些物品都會在某個地方出現NSString,但你偶爾會在這個藏品中出現NSNull。我發現在iOS客戶端代碼中會發生這種情況,這些代碼會消耗來自各種Web服務的JSON結果 - 例如,當後端未提供客戶端期望的所有信息時。

UPDATE:grafically XCode中點擊 集B objc_exception_throw: 調試>斷點>創建異常斷點

+0

謝謝!這是我需要的。當應用程序崩潰時,XCode指出哪一行是罪魁禍首,我能夠修復它。 – Josh

+0

lldb也有一個「語言異常」的斷點類型,所以從lldb你可以做'break set -E objc' Xcode只是在這個下面做這個... –

相關問題