2012-05-24 73 views
20

我真的不知道爲什麼我有這個錯誤。EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)

首先調試器停止在機器代碼

enter image description here

線程也說明不了什麼。在沒有代碼實際上

enter image description here

所以它是與_dispatch_worker_thread

那是什麼程序停止?

無論如何我可以調試呢?我應該回滾嗎?

+2

這通常發生在某個對象已被釋放[This blog](http://www.andrashatvani.com/2011/05/understanding-excbadaccess.html)可能會有所幫助,但請同時顯示一些代碼。 – Tikkes

+2

你有沒有設置異常斷點?單擊斷點選項卡 - >點擊左下方的加號按鈕 - >單擊「添加異常斷點」 - >用默認設置完成點擊通常很好。然後再運行 –

+0

我會試試。由於某種原因,它不會再發生。另外,因爲我正在使用ARC,我認爲應該注意發佈和內容。 –

回答

5

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP)__builtin_trap()的副產品 - 這是GCC和clang內部函數。在x86上它,我們得到

0x4dfa2: movl %esi, (%esp) 
    0x4dfa5: movl %edx, 4(%esp) 
    0x4dfa9: movl %eax, 8(%esp) 
    0x4dfad: calll 0x110ffa     ; symbol stub for: objc_msgSend 
    0x4dfb2: cmpb $0, %al 
    0x4dfb4: je  38 
-> 0x4dfba: ud2  
    0x4dfbc: movl -32(%ebp), %eax 

指令ud2是這裏的罪魁禍首,而不是由Xcode的特殊處理。

在ARM上,我們編譯爲trap,並在XCode中產生trace斷點。這是我們在這裏的clang中的一個錯誤嗎?

最終在原始問題的背景下,我懷疑失敗的圖書館功能已經發出了斷言。

+0

我有這個相同的問題,任何想法如何解決這個問題? – 8vius

+0

由於這個異常是斷言宏的結果,所以我解決了首先產生它的問題。幸運的是,我有相關組件的源代碼。 您的第一個通話端口應該是獲得完整的回溯並減少通話堆棧。如果 - 就像我看到的另一個類似問題的海報一樣 - 它在Apple提供的庫中,我想你需要非常徹底地檢查你對API的使用。 – marko

8

當您運行CPU上不支持的(矢量)擴展時,會發生此類崩潰。

例如,在下面的Xcode 5「項目的設置/建造的設置/代碼生成,設置 ‘啓用其他矢量擴展’到‘AVX2’。建立你的可執行文件。

現在上運行:

  • 英特爾酷睿i5:它會崩潰(無論編譯器決定使用AVX2)與 'exc_i386_invop子碼=爲0x0'
  • 英特爾酷睿i7:。將工作
+0

在英特爾G620處理器上不會發生此故障 每次在英特爾酷睿i5上使用AVPlayer類時都會崩潰。 – rozochkin

0

在我的情況下,我添加了一個觀察者contentSizeUITextView在viewDidLoad中,並且從未刪除它。通過將其添加到viewDidAppear,然後在viewWillDisappear中刪除它來修復它。 它是如此惱人找出:(

要使用前viewDidAppear

[self.textViewMessage addObserver:self 
          forKeyPath:NSStringFromSelector(@selector(contentSize)) 
           options:NSKeyValueObservingOptionNew 
           context:nil]; 

刪除觀察員加入觀察員viewWillDisappear

[self.textViewMessage removeObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize))]; 
相關問題