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 работает нормально. Запрошенный mp3 файл загружается и воспроизводится без проблем после точки останова.

Вы знаете, что я делаю неправильно?

EDIT: Я побежал назад, когда он остановился в точке останова. Это был результат:

(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

"РЕШЕНИЕ": Оказывается, если я отключу точку исключения исключения для всех исключений и использую только точку останова для исключений Objective-C, проблема исчезнет. Но это не решает проблему, что выделение AVAudioPlayer вызывает исключение С++.

Ответ 1

Добавьте свою точку останова исключения и отредактируйте тип исключения с "Все" на "Objective-C исключения"

Некоторые классы в AudioToolbox генерируют регулярные исключения С++. Вы можете отфильтровать их таким образом.

Ответ 2

AVAudioPlayer и AVAudioRecorder будут генерировать исключения, некоторые из них. Они обрабатываются внутри игроков игроками, но если у вас есть точка останова для "Все точки останова" (т.е. Исключение: все, перерыв: при броске), вы поймаете эти исключения. Если вы продолжите выполнение на них, приложение будет продолжать работать нормально и вообще не будет аварийно завершено.

Единственное решение, с которым я столкнулся, - это нажать на панель точек останова в Breakpoint Navigator, отключить эту конкретную точку останова и работать с ней.

Когда/если приложение когда-либо выходит из строя с заброшенным исключением, я cmd-6, включаю эту точку останова и повторяю и выполняю все, что я сделал, когда он разбился.Забастовкa >

Изменить: установка для "Objective-C исключений", очевидно, как это сделать. См. Выше ответ!

Ответ 3

Вот скриншот, показывающий, как я исправил эту ошибку. Я не уверен, что это так, как говорят выше, но я предполагаю, что это похоже.

  • Перейдите к навигатору точки останова в Xcode.
  • Управляйте щелчком по строке "Все исключения".
  • Выберите параметр "Изменить точку останова...".
  • Измените Exception с All на Objective-C.

введите описание изображения здесь

Ответ 4

Задняя часть помогла, спасибо!. Недавно мы столкнулись с той же проблемой. Оказывается, mp3 файлы, на которые он метался, не имели действительного тега ID3 и запускали их через приложение, такое как Tagr исправил их прямо!

Ответ 5

Попробуйте установить AVAudioPlayer как переменную класса!