У меня есть приложение iOS, которое вылетает на нескольких устройствах.Учитывая плохие отзывы, которые я вижу в iTunes, когда это происходит, сбои происходят в той же точке кода.
Наконец, один приятный человек связался со мной, вместо того, чтобы просто оставить отзыв, и онидаже когда я установил отладочную версию приложения, используя TestFlight для меня.
Вооружившись отчетом о сбое, я вижу, что это происходит где-то глубоко в malloc:
2 libSystem.B.dylib 0x34683d6e _sigtramp + 42
3 libSystem.B.dylib 0x3468c886 szone_malloc_should_clear + 2122
Иучитывая номер строки, это происходит в тот момент, когда я запускаю фоновую задачу:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [self loadImage:path];
dispatch_sync(dispatch_get_main_queue(), ^{
Я не уверен, на какой из этих трех строк происходит сбой, поэтому неясно, является ли сбойпроисходит при вызове самого GCD, прямо в начале кода блока или где-то в самом блоке.
Трассировка стека заканчивается в функции, которая включает фрагмент кода выше, а не, казалось бы,в самом блоке.Если сбой произошел в асинхронном блоке, будет ли трассировка стека по-прежнему включать дерево вызовов в родительскую функцию?В настоящее время я работаю в предположении, что трассировка стека для сбоя внутри блока не будет включать вызов родительской функции (так как блок выполняется асинхронно в своем собственном потоке), поэтому я думаю, что это сбой вызова GCD.
Я пытался использовать TFLog, чтобы найти точный момент сбоя, но журналы вообще не записываются.Я знаю, что вызовы журнала выполняются правильно, поскольку на моем устройстве разработки я вижу всплывающие журналы в рекордере TestFlight, поэтому кажется, что сбой нарушает этот параметр отладки.
Наконец, TestFlight не может найтиНомер версии iOS для iPhone 4, который использует этот пользователь - так что мне интересно, это устройство с джейлбрейком, и может ли это иметь эффект?(Я спросил пользователя, ответа пока нет).
Обратите внимание, что это весь код ARC, поэтому я был бы очень удивлен, обнаружив, что это проблема управления памятью.Он также изолирован от нескольких устройств, но эти устройства каждый раз дают сбой в один и тот же момент.
Может кто-нибудь предложить какие-либо идеи или предложения по отладке (учитывая, что у меня нет самопроизвольного сбоя устройства).
Спасибо,
Тим