12

4.3.2、5.0、および 5.1 シミュレーターで iOS プログラムを実行していますが、AudioToolbox で奇妙な内部例外が発生しています。すべての例外に対して Xcode (Xcode 4.3.1、10.7.3 で実行) にブレークポイントを設定しましたが、次の呼び出し中にデバッガーが壊れていますAudioServicesCreateSystemSoundID()

SystemSoundID soundID;
OSStatus errorCode = AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
                  // ^ boom. ^

バックトレース:

(lldb) bt
* thread #1: tid = 0x1f03, 0x9000e230 libc++abi.dylib`__cxa_throw, stop reason = breakpoint 1.2
frame #0: 0x9000e230 libc++abi.dylib`__cxa_throw
frame #1: 0x00144193 AudioToolbox`ID3ParserHandle::ID3ParserHandle(void*, long (*)(void*, unsigned long, unsigned long, unsigned long, void**, unsigned long*)) + 259
frame #2: 0x001442de AudioToolbox`ID3ParserOpen + 62
frame #3: 0x0006c0e7 AudioToolbox`MPEGAudioFile::ParseID3Tags() + 87
frame #4: 0x0006c2ba AudioToolbox`MPEGAudioFile::ParseAudioFile() + 26
frame #5: 0x00015153 AudioToolbox`AudioFileOpenWithCallbacks + 371
frame #6: 0x00027020 AudioToolbox`_ZL15VerifyAndMapURLPK7__CFURLRx + 448
frame #7: 0x00026d85 AudioToolbox`_ZL18ActionDataToServerPK7__CFURLm + 933
frame #8: 0x000da26b AudioToolbox`AudioServicesCreateSystemSoundID + 235
frame #9: 0x00005be1 app`-[SoundsViewController playSoundForPath:] + 257 at SoundsViewController.m:161
frame #10: 0x00005a99 app`-[SoundsViewController tableView:didSelectRowAtIndexPath:] + 777 at SoundsViewController.m:129
frame #11: 0x0029db68 UIKit`-[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
frame #12: 0x00293b05 UIKit`-[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
frame #13: 0x009ad79e Foundation`__NSFireDelayedPerform + 441
frame #14: 0x00fb58c3 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
frame #15: 0x00fb6e74 CoreFoundation`__CFRunLoopDoTimer + 1220
frame #16: 0x00f132c9 CoreFoundation`__CFRunLoopRun + 1817
frame #17: 0x00f12840 CoreFoundation`CFRunLoopRunSpecific + 208
frame #18: 0x00f12761 CoreFoundation`CFRunLoopRunInMode + 97
frame #19: 0x01f6b1c4 GraphicsServices`GSEventRunModal + 217
frame #20: 0x01f6b289 GraphicsServices`GSEventRun + 115
frame #21: 0x00234c93 UIKit`UIApplicationMain + 1160
frame #22: 0x00002c45 app`main + 181 at main.m:14

ただし、オーディオ ファイルsoundIDは正常に作成され、返される OSStatus エラー コードAudioServicesCreateSystemSoundIDは 0 です。

これは、私がインストールした 3 つの iOS シミュレータ バージョンすべてと、5.1 を実行している iPhone で発生します。

これは、 AVAudioPlayer がデバッグ モードでブレークポイントをスローするのと同じ一般的なバックトレースのように見えますが、AudioToolbox をより直接呼び出した結果です。

これは AudioToolbox のバグなので (フレームワークはフロー制御や bbum などに例外を使用すべきではない)、Apple に報告したいのですが、そうする前に、他にどのような情報を収集してそれらに提供できるか疑問に思っています。そして、このスローを回避する方法があれば (おそらく、この mp3 の ID3 タグを微調整することによって?)

4

2 に答える 2

6

同じ場所で例外が発生していました。例外が発生していた mp3 ファイルに有効な ID3 タグがなく、Tagrなどのアプリを実行して修正したことが判明しました。

于 2013-02-27T21:53:28.453 に答える
3

C++ ライブラリは、バッファの終わりやファイルの終わりなど、あらゆる種類の理由で内部的に例外をスローおよびキャッチする場合があります。これが例外の適切な使用であるか、優れたコーディング スタイルであるか、またはソフトウェア エンジニアリングの実践であるかについては、議論の余地があります。例外がコードに取り込まれない限り、心配する必要はありません。

ルーチンが正常に戻り、目的の出力が得られたので、何も問題はありません (つまり、バグではありません)。

于 2012-07-02T18:18:24.947 に答える