2012-05-24 10 views
20

मैं वास्तव में यह नहीं समझ सकता कि मेरे पास यह बग क्यों है।EXC_BAD_INSTRUCTION (कोड = EXC_I386_INVOP, सबकोड = 0x0)

सभी डिबगर बंद के पहले मशीन कोड

enter image description here

धागा पर भी कुछ भी नहीं पता चलता है। कोई कोड वास्तव में

enter image description here

तो यह _dispatch_worker_thread

कि क्या है के साथ क्या करने के लिए कुछ है पर कार्यक्रम बंद?

किसी भी तरह से मैं इसे कैसे डिबग कर सकता हूं? क्या मुझे सिर्फ रोलबैक चाहिए?

+2

यह आमतौर पर तब होता है में viewDidAppear

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

निकालें पर्यवेक्षक में पर्यवेक्षक जोड़े जब एक वस्तु को पहले से ही जारी की गई है कष्टप्रद था यह। [यह ब्लॉग] (http://www.andrashatvani.com/2011/05/understanding-excbadaccess.html) मदद कर सकता है लेकिन कृपया कुछ कोड भी दिखाएं। – Tikkes

+2

क्या आपको अपवादों पर ब्रेकपॉइंट सेट मिला है?ब्रेकपॉइंट्स टैब पर क्लिक करें -> नीचे बाईं ओर प्लस बटन दबाएं -> 'अपवाद ब्रेकपॉइंट जोड़ें' पर क्लिक करें -> डिफ़ॉल्ट सेटिंग्स के साथ किए गए हिट सामान्य रूप से ठीक है। फिर फिर से चलाएं –

+0

मैं कोशिश करूंगा। कुछ कारणों से यह फिर से नहीं होता है। इसके अलावा, क्योंकि मैं एआरसी का उपयोग कर रहा हूं, मुझे लगता है कि रिलीज और सामानों का ध्यान रखा जाना चाहिए। –

उत्तर

5

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP)__builtin_trap() का उप-उत्पाद है - जो एक जीसीसी और क्लैंग आंतरिक कार्य है। 86 इस पर हम

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 द्वारा विशेष रूप से नियंत्रित किया जाता है मिलता है।

एआरएम पर हम यह trap में संकलित करते हैं और परिणामस्वरूप trace एक्सकोड में ब्रेक-पॉइंट में परिणाम होते हैं। क्या यह clang में एक बग है जो हमारे पास है?

आखिरकार मूल प्रश्न के संदर्भ में, मुझे संदेह है कि लाइब्रेरी फ़ंक्शन जो असफल रहा है, ने दावा किया है।

+0

मुझे यह वही समस्या है, कोई विचार यह कैसे हल करें? – 8vius

+0

चूंकि यह अपवाद एक दावा मैक्रो का परिणाम था, इसलिए मैंने समस्या को ठीक किया जो इसे पहले स्थान पर उत्पन्न कर रहा था। सौभाग्य से, मेरे पास प्रश्न के घटक के लिए स्रोत कोड था। कॉल का आपका पहला बंदरगाह पूर्ण बैकट्रैक प्राप्त करना और कॉल-स्टैक को कम करना चाहिए। अगर - जैसा कि मैंने देखा एक समान समस्या के दूसरे पोस्टर के मामले में - यह एक ऐप्पल आपूर्ति पुस्तकालय में है, मुझे लगता है कि आपको एपीआई के उपयोग को पूरी तरह से जांचना होगा। – marko

8

इस प्रकार का क्रैश तब होगा जब आप एक (वेक्टर) एक्सटेंशन चला रहे हों जो आपके सीपीयू पर समर्थित नहीं है।

उदाहरण के लिए, xcode 5 के तहत में

"परियोजना सेटिंग्स/निर्माण-सेटिंग्स/कोड जनरेशन, सेट " अतिरिक्त वेक्टर एक्सटेंशन सक्षम AVX2 "। अपने निष्पादन योग्य बनाएँ" के लिए "। अब एक पर चला :

  • इंटेल कोर i5: यह दुर्घटना के साथ 'exc_i386_invop subcode = 0x0' (जहां संकलक AVX2 उपयोग करने का फैसला) जा रहा है
  • इंटेल कोर i7:।। यह काम करेंगे
+0

इंटेल जी 620 प्रोसेसर पर यह क्रैश न हो और यह इंटेल कोर i5 पर AVPlayer क्लास के साथ हर बार क्रैश हो रहा है। – rozochkin

0

मेरे मामले में मैं contentSize के लिए UITextView पर देखने के लिए एक पर्यवेक्षक जोड़ रहा था और इसे कभी भी हटा नहीं रहा था। viewDidAppear में इसे जोड़कर इसे फिर से लोड करें और फिर इसे viewWillDisappear में हटा दें। यह इतना :(पता लगाने के लिए

इससे पहले कि आप उपयोग करना चाहते हैं viewWillDisappear

[self.textViewMessage removeObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize))]; 
संबंधित मुद्दे