AVAudioPlayer выбрасывает точку останова в режиме отладки - PullRequest
103 голосов
/ 13 марта 2012

Каждый раз, когда я загружаю приложение, оно останавливается, как будто я установил точку останова в этой строке:

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

У вас есть идеи, что я делаю неправильно?

РЕДАКТИРОВАТЬ: Я запустилОбратный след, когда он останавливается в точке останова.Это был вывод:

(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 вызывает исключение C ++.

Ответы [ 6 ]

168 голосов
/ 22 октября 2012

Добавьте точку останова исключения и измените тип исключения с «Все» на «Исключения Objective C»

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

21 голосов
/ 03 октября 2012

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

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

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

Редактировать: установка «Objective-C исключения», очевидно, как это сделать.Смотри ответ выше!

6 голосов
/ 14 ноября 2015

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

  1. Перейти к навигатору точек останова в Xcode.
  2. Удерживая клавишу «Control», щелкните строку «Все исключения».
  3. Выберите параметр «Изменить точку останова ...».
  4. Измените Exception с All на Objective-C.

enter image description here

2 голосов
/ 28 февраля 2013

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

1 голос
/ 09 февраля 2018

В Xcode 9.2 вы можете отключить определенные исключения после их просмотра.Откройте меню точек останова и нажмите, чтобы отключить (затененная стрелка)

enter image description here

0 голосов
/ 12 марта 2013

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

...