2012-03-13 11 views
99

हर बार जब मैं अनुप्रयोग के रूप में अगर मैं इस लाइन पर एक ब्रेकपाइंट सेट किया था बंद हो जाता है लोड में ब्रेकप्वाइंट फेंकता है:AVAudioPlayer डिबग मोड

self.audioPlayer = 
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName] 
           error:&outError] autorelease]; 

वहाँ ऊपर कोई ब्रेकप्वाइंट या इस लाइन के पास किसी भी जगह है। यह तब होता है जब मैं डीबग मोड में ऐप चलाता हूं और ब्रेकपॉइंट के बाद कुछ भी क्रैश नहीं होता है। जब मैं "प्रोग्राम निष्पादन जारी रखें" पर क्लिक करता हूं तो ऐप कुछ भी नहीं हुआ है।

यह loadData विधि है, जो initWithData साथ कहा जाता है:

-(NSData*)loadData:(NSString*)fileName 
{ 
    NSString *dataPath = [self.path stringByAppendingPathComponent:fileName]; 
    dataPath = [dataPath stringByStandardizingPath]; 
    NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ]; 
    return data; 
} 

loadData समारोह काम करने ठीक लग रहा है। अनुरोधित एमपी 3 फ़ाइल ब्रेकपॉइंट के बाद किसी भी समस्या के बिना लोड और खेला जाता है।

क्या आपको कोई विचार है कि मैं क्या गलत कर रहा हूं?

संपादित करें: ब्रेकपॉइंट पर बंद होने पर मैं बैकट्रैक चलाता हूं।

 
(lldb) bt 
* thread #1: tid = 0x1c03, 0x30df1724 libc++abi.dylib`__cxa_throw, stop reason = breakpoint 1.2 
    frame #0: 0x30df1724 libc++abi.dylib`__cxa_throw 
    frame #1: 0x36403a24 AudioToolbox`ID3ParserHandle::ID3ParserHandle(void*, long (*)(void*, unsigned long, unsigned long, unsigned long, void**, unsigned long*)) + 452 
    frame #2: 0x36403b0e AudioToolbox`ID3ParserOpen + 142 
    frame #3: 0x3635bd16 AudioToolbox`MPEGAudioFile::ParseID3Tags() + 58 
    frame #4: 0x3635b9aa AudioToolbox`MPEGAudioFile::ParseAudioFile() + 26 
    frame #5: 0x3631723e AudioToolbox`AudioFileObject::DoOpenWithCallbacks(void*, long (*)(void*, long long, unsigned long, void*, unsigned long*), long (*)(void*, long long, unsigned long, void const*, unsigned long*), long long (*)(void*), long (*)(void*, long long)) + 166 
    frame #6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612 
    frame #7: 0x31f4c1ec AVFoundation`-[AVAudioPlayer initWithData:error:] + 120 

"समाधान": यह आउटपुट था यह पता चला है, अगर मैं सभी अपवादों के लिए अपवाद ब्रेकप्वाइंट को अक्षम करें और केवल ऑब्जेक्टिव-सी अपवाद समस्या गायब हो जाता है के लिए ब्रेकप्वाइंट का उपयोग करें। लेकिन यह समस्या को हल नहीं करता है कि AVAudioPlayer का आवंटन C++ अपवाद फेंकता है।

+1

मैं एक ही स्टैक ट्रेस किया था। "सभी अपवाद" ब्रेकपॉइंट को अक्षम करने से यह मेरे लिए नहीं हुआ। – makdad

उत्तर

159

"सभी" "ऑब्जेक्टिव-सी अपवाद"

से अपने अपवाद ब्रेकप्वाइंट अपवाद प्रकार जोड़ें और AudioToolbox में कुछ कक्षाएं नियमित रूप से सी ++ अपवाद फेंक संपादित करें। आप उन्हें इस तरह से फ़िल्टर कर सकते हैं।

+4

जैसा कि मैंने अपने प्रश्न में "समाधान" खंड लिखा है, मैं इसे समाधान के रूप में नहीं मानता। 'AVAudioPlayer' को यादृच्छिक अपवाद नहीं फेंकना चाहिए। –

+10

"AVAudioPlayer को यादृच्छिक अपवाद नहीं फेंकना चाहिए" - यह हमारे हाथों में नहीं है। ढांचा लिखा गया है और आपको इसके साथ रहना है। हालांकि, मैं मानता हूं कि यह अच्छा विचार नहीं है – Mugunth

+0

@Mugunth क्या इसका मतलब यह है कि ढांचा आंतरिक त्रुटियों का जवाब दे रहा है और सही कर रहा है? क्या आप इस पर किसी भी अन्य दस्तावेज के बारे में जानते हैं? मुझे बहुत अधिक ऑनलाइन नहीं मिल रहा है जो मुझे बताता है कि यह प्रोग्रामर त्रुटि के लिए नीचे हो सकता है ... – Remover

20

AVAudioPlayer और AVAudioRecorder दोनों अपवाद फेंक देंगे, उनमें से कई। इन्हें खिलाड़ियों द्वारा आंतरिक रूप से संभाला जाता है लेकिन यदि आपके पास "ऑल ब्रेकपॉइंट्स" (यानी अपवाद: ऑल, ब्रेक: ऑन थ्रो) के लिए ब्रेकपॉइंट है तो आप इन अपवादों को पकड़ लेंगे। यदि आप इन पर निष्पादन जारी रखते हैं, तो ऐप सामान्य रूप से चलना जारी रहेगा और बिल्कुल भी क्रैश नहीं होगा।

एकमात्र समाधान मैं अब तक लेकर आए हैं ब्रेकप्वाइंट नेविगेटर में ब्रेकप्वाइंट पट्टी पर क्लिक करने के लिए, इस विशेष ब्रेकप्वाइंट अक्षम करने, और इसके साथ विकलांग चल रहा है।

कब/अगर ऐप कभी भी फेंकने वाले अपवाद के साथ दुर्घटनाग्रस्त हो जाता है, तो मैं cmd-6, उस ब्रेकपॉइंट को सक्षम करता हूं, और फिर से चलाता हूं और जब भी क्रैश हो जाता है तो करता हूं।

संपादित करें: "उद्देश्य-सी अपवाद" पर सेटिंग स्पष्ट रूप से यह कैसे करें। ऊपर जवाब देखें!

2

बैकट्रैस ने बहुत मदद की, धन्यवाद! हम हाल ही में एक ही मुद्दे में चलना शुरू कर देंगे। यह एमपी 3 फाइलों को फेंकने पर पता चला है कि उनके पास वैध आईडी 3 टैग नहीं था और उन्हें Tagr जैसे ऐप के माध्यम से चलाया गया था, उन्हें ठीक कर दिया गया!

+1

आईडी 3 टैग में लापता फ़ील्ड सेट करने के बाद, ऐप AVAudioPlayer के प्रारंभ में बंद नहीं हुआ था, लेकिन यह अभी भी बंद हो गया नाटक निर्देश ... –

+0

कौन से फ़ील्ड आवश्यक थे? उन सभी को? – Reggian

+0

@ रेगियन मुझे याद नहीं है, यह बहुत समय पहले था। उसके लिए माफ़ करना! मुझे याद नहीं है कि किसी भी फ़ील्ड को याद करने की ज़रूरत है, बस मुझे एक टैग सैनिटाइज़र के माध्यम से चलाने के लिए पर्याप्त था अगर मुझे सही याद है! –

-4

AVAudioPlayer को कक्षा परिवर्तनीय के रूप में सेट करने का प्रयास करें!

+1

मेरे मामले में मैंने पहले ही AVAudioPlayer को क्लास वैरिएबल के रूप में स्थापित किया है और यह अभी भी काम नहीं करता है। ऐसा लगता है कि आपको वास्तव में समाधान नहीं पता था –

4

यहां एक स्क्रीनशॉट दिखा रहा है कि मैंने यह त्रुटि कैसे तय की है। मुझे यकीन नहीं है कि यह वही तरीका है जिस पर उपर्युक्त उत्तर बात कर रहे हैं, लेकिन मैं इसे समान मानता हूं।

  1. एक्सकोड में ब्रेकपॉइंट नेविगेटर पर जाएं।
  2. 'सभी अपवाद' लाइन पर नियंत्रण-क्लिक करें।
  3. 'ब्रेकपॉइंट संपादित करें ...' विकल्प का चयन करें।
  4. ExceptionAll से Objective-C पर बदलें।

enter image description here

1

Xcode 9.2 में आप विशिष्ट अपवाद निष्क्रिय कर सकते हैं, जब आप उन्हें देखा है। ओपन मेनू breakpoints और निष्क्रिय करने के लिए क्लिक करें (फीका तीर)

enter image description here

संबंधित मुद्दे