2012-03-13 4 views
99

で私は、この行にブレークポイントを設定していたかのように止まるアプリをロードするたびにブレークポイントをスローします。私はデバッグモードでアプリケーションを実行し、ブレークポイントの後に何もクラッシュしない場合にのみ発生します。 "Continue program execution"をクリックすると何も起こらない。AVAudioPlayerは、デバッグモード

これはinitWithDataと呼ばれloaddataの方法、次のとおりです。loaddataの機能が正常に動作しているようだ

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

。要求されたmp3ファイルは、ブレークポイントの後で問題なくロードされ、再生されます。

私が間違っていることを知っていますか?

編集: ブレークポイントで停止するとバックトレースが実行されました。

 
(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 

「SOLUTION」:これは、出力された私はすべての例外の例外ブレークポイントを無効にして唯一の問題は消えObjective-Cの例外のブレークポイントを使用する場合には、判明しました。しかし、AVAudioPlayerの割り当てによってC++例外がスローされるという問題は解決されません。

+1

メニューをブレークし、(色あせ矢印)を無効にします。 "すべての例外"ブレークポイントを無効にすると、それは私には起こりませんでした。 – makdad

答えて

159

はAudioToolboxのいくつかのクラスは、通常のC++の例外を投げる「すべて」を「Objective-Cの例外」

から例外タイプをご使用の例外ブレークポイントを追加し、編集します。このようにフィルタリングすることができます。

+4

質問に「解決策」のセクションを書いたので、これを解決策とは考えません。 'AVAudioPlayer'はランダムな例外をスローするべきではありません。 –

+10

「AVAudioPlayerはランダム例外を投げてはいけません」 - これは私たちの手にはありません。それがフレームワークが書かれた方法であり、あなたはそれを持って生きなければなりません。しかし、私はそれが良い考えではないことに同意します – Mugunth

+0

@Mugunthこれは、フレームワークが内部エラーに応答して訂正していることを意味しますか?あなたはそれに関する他の文書を知っていますか?私はこれがプログラマーのエラーになる可能性があることを私に示唆する多くのオンラインを見つけることができません... – Remover

20

AVAudioPlayerとAVAudioRecorderはどちらも例外をスローします。これらはプレイヤーによって内部的に処理されますが、 "すべてのブレークポイント"(つまり例外:すべて、ブレーク:スロー)のブレークポイントがある場合、これらの例外をキャッチします。これらのアプリケーションで実行を続けると、アプリケーションは正常に動作し続け、クラッシュしません。

私が今までに思いついた唯一の解決策は、ブレークポイントナビゲータでブレークポイントバーをクリックし、この特定のブレークポイントを無効にし、無効にして実行することです。

例外がスローされてアプリケーションがクラッシュした場合、私はcmd-6を有効にしてブレークポイントを有効にし、クラッシュ時に何をしても再実行します。

編集:「Objective-C例外」に設定する方法は明らかです。上の答えを見てください!

2

バックトレースが大いに助けてくれました。私たちは最近、同じ問題にぶつかり始めました。有効なID3タグを持たず、Tagrのようなアプリを通じて実行していたmp3ファイルが表示されました。

+1

ID3タグに欠けているフィールドを設定した後、アプリケーションはもはやAVAudioPlayerの初期化で停止しませんでしたが、再生命令... –

+0

どのフィールドが必要でしたか?それらのすべて? – Reggian

+0

@レギーン私は思い出していない、それはずっと前だった。それについて申し訳ありません!私が正しく覚えていれば、忘れていたフィールドを追加する必要がないことを覚えていません。 –

-4

AVAudioPlayerをクラス変数として設定してみてください!

+1

私の場合は、既にAVAudioPlayerをクラス変数として設定していますが、それでも動作しません。あなたは本当に解決策を知らなかったように見える –

4

このエラーを修正した方法を示すスクリーンショットです。私はこれが上の答えが話しているのと同じ方法であるかどうかは分かりませんが、私はそれに似ています。

  1. Xcodeのブレークポイントナビゲータに移動します。
  2. [すべての例外]行をControl-クリックします。
  3. [ブレークポイントの編集...]オプションを選択します。
  4. ExceptionAllからObjective-Cに変更してください。 Xcodeの9.2で

enter image description here

1

あなたがそれらを見てきた後に特定の例外を無効にすることができます。 オープンは、私は同じスタックトレースを持っていた

enter image description here