AVAudioPlayer डीबग मोड में ब्रेकपॉइंट फेंकता है


108

हर बार जब मैं इस ऐप को लोड करता हूं तो ऐसा लगता है जैसे मैंने इस लाइन पर एक ब्रेकपॉइंट सेट किया था:

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

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

यह लोडडेटा विधि है, जिसे इसके साथ बुलाया जाता है initWithData:

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

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

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

संपादित करें: जब यह ब्रेकपॉइंट पर रुकता है तो मैंने एक बैकट्रेस चलाया। यह आउटपुट था:

(lldb) बी.टी.
* धागा # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, रोक कारण = विराम 1.2
    फ्रेम # 0: 0x30df1724 libc ++ abi.dylib`__cxa_throw
    फ्रेम # 1: 0x36403a24 AudioToolbox`ID3ParserHandle :: ID3ParserHandle (void *, long (*) (void *), अहस्ताक्षरित लंबा, अहस्ताक्षरित लंबा, बिना लिखा लंबा, void **, अहस्ताक्षरित लंबा *)) + 452
    फ्रेम # 2: 0x36403b0e AudioToolbox`ID3ParserOpen + 142
    फ़्रेम # 3: 0x3635bd16 AudioToolbox`MPEGAudioFile :: ParseID3Tags () 58
    फ़्रेम # 4: 0x3635b9aa AudioToolbox`MPEGAudioFile :: ParseAudioFile () 26
    फ्रेम # 5: 0x3631723e AudioToolbox`AudioFileObject :: DoOpenWithCallbacks (void *, long (*) (void *, long long, unsigned long, void *, unsigned long *), long (*) (void *), long long, unsign long , void const *, unsign long *), लॉन्ग लॉन्ग (*) (void *), long (*) (void *, long long)) + 166
    फ़्रेम # 6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612
    फ्रेम # 7: 0x31f4c1ec AVFoundation`- [AVAudioPlayer initWithData: error:] + 120

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


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

जवाबों:


175

अपना अपवाद विराम बिंदु जोड़ें और अपवाद प्रकार को "सभी" से "उद्देश्य-सी अपवाद" में संपादित करें

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


6
जैसा कि मैंने अपने प्रश्न में "समाधान" अनुभाग लिखा है, मैं इसे एक समाधान के रूप में नहीं मानता हूं। AVAudioPlayerयादृच्छिक अपवाद फेंक नहीं करना चाहिए।
थॉमसक्ल

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

@ मुगुन्थ क्या इसका मतलब यह है कि रूपरेखा आंतरिक त्रुटियों का जवाब दे रही है और सही कर रही है? क्या आप इसके बारे में किसी अन्य दस्तावेज से अवगत हैं? मुझे बहुत कुछ ऑनलाइन नहीं मिला, जो मुझे बताता है कि यह प्रोग्रामर त्रुटि के लिए नीचे हो सकता है ...
रिमूवर

21

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

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

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

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


9

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

  1. Xcode में ब्रेकपॉइंट नेविगेटर पर जाएं।
  2. 'ऑल एक्सेप्शन' लाइन पर कंट्रोल-क्लिक करें।
  3. 'ब्रेकपॉइंट संपादित करें ...' विकल्प चुनें।
  4. बदले Exceptionसे Allकरने के लिए Objective-C

यहां छवि विवरण दर्ज करें


2

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


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

किन क्षेत्रों की आवश्यकता थी? उन सभी को?
पुनर्जन्म

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

2

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

यहां छवि विवरण दर्ज करें


-4

AVAudioPlayer को एक वर्ग चर के रूप में सेट करने का प्रयास करें!


1
मेरे मामले में मैंने पहले ही AVAudioPlayer को एक वर्ग चर के रूप में स्थापित किया है और यह अभी भी काम नहीं करता है। लगता है कि आप वास्तव में समाधान नहीं जानते थे
एलेक्स Cio
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.