#iphone #objective-c #crash #crash-reports
#iPhone #objective-c #сбой #отчеты о сбоях
Вопрос:
Apple дважды отклоняла мое приложение из-за сбоя при запуске. Я много раз тестировал его на разных устройствах (iPhone 4, iPhone3GS, Simulator, iPad2), и он никогда не зависал.
РЕДАКТИРОВАТЬ: это часть журнала сбоев с символикой.
Спасибо!
Incident Identifier: DD9A5C38-DFE5-4CB5-A15B-8C55967FFFD1
CrashReporter Key: bf318d2d968114ff69d458c2f8cbdc6b869e1ec7
Hardware Model: iPhone3,1
Process: iMetroRoma [2788]
Path: /var/mobile/Applications/8EC59E9D-D070-4CAD-892E-91BCE94AA58C/iMetroRoma.app/iMetroRoma
Identifier: iMetroRoma
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-10-24 13:23:22.895 -0700
OS Version: iPhone OS 5.0 (9A334)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x30d828bf __exceptionPreprocess 163
1 libobjc.A.dylib 0x37f271e5 objc_exception_throw 33
2 CoreFoundation 0x30ccbb6b -[__NSArrayM objectAtIndex:] 271
3 iMetroRoma 0x0000426f 0x1000 12911
4 CoreLocation 0x34fbc5df -[CLLocationManager onClientEventLocation:] 1171
5 CoreLocation 0x34fbbf81 -[CLLocationManager onClientEvent:supportInfo:] 201
6 CoreLocation 0x34fb662f __CLClientInvokeCallback_block_invoke_0 55
7 CoreFoundation 0x30d56b31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ 13
8 CoreFoundation 0x30d5615f __CFRunLoopDoBlocks 159
9 CoreFoundation 0x30d55381 __CFRunLoopRun 1433
10 CoreFoundation 0x30cd84dd CFRunLoopRunSpecific 301
11 CoreFoundation 0x30cd83a5 CFRunLoopRunInMode 105
12 GraphicsServices 0x33906fed GSEventRunModal 157
13 UIKit 0x32d4a743 UIApplicationMain 1091
14 iMetroRoma 0x000024e3 0x1000 5347
15 iMetroRoma 0x0000249c 0x1000 5276
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3206732c __pthread_kill 8
1 libsystem_c.dylib 0x3655df54 pthread_kill 48
2 libsystem_c.dylib 0x36556fe4 abort 88
3 libc abi.dylib 0x31a1ff64 abort_message 40
4 libc abi.dylib 0x31a1d346 _ZL17default_terminatev 18
5 libobjc.A.dylib 0x37f272dc _objc_terminate 140
6 libc abi.dylib 0x31a1d3be _ZL19safe_handler_callerPFvvE 70
7 libc abi.dylib 0x31a1d44a std::terminate() 14
8 libc abi.dylib 0x31a1e81e __cxa_rethrow 82
9 libobjc.A.dylib 0x37f2722e objc_exception_rethrow 6
10 CoreFoundation 0x30cd853e CFRunLoopRunSpecific 398
11 CoreFoundation 0x30cd839e CFRunLoopRunInMode 98
12 GraphicsServices 0x33906fe6 GSEventRunModal 150
13 UIKit 0x32d4a73c UIApplicationMain 1084
14 iMetroRoma 0x000024dc 0x1000 5340
15 iMetroRoma 0x00002494 0x1000 5268
...
Thread 0 crashed with ARM Thread State:
r0: 0x00000000 r1: 0x00000000 r2: 0x00000001 r3: 0x00000000
r4: 0x00000006 r5: 0x3f54dce8 r6: 0x00000002 r7: 0x2fdffa6c
r8: 0x001a1c20 r9: 0x31a20a4a r10: 0x0000d224 r11: 0x0000cbfc
ip: 0x00000148 sp: 0x2fdffa60 lr: 0x3655df5b pc: 0x3206732c
cpsr: 0x00000010
...
Комментарии:
1. пока вы не обозначите журнал, никто не сможет помочь. Импортируйте его в Xcode / Organizer / Devices / Device Logs
2. вы пробовали проверять наличие зомби?
Ответ №1:
Хорошо, вы «собирали и архивировали» при отправке в appstore?
Если вы этого не сделали, вам не повезло. Сейчас вы мало что можете сделать. Даже если вы выполнили сборку и архивирование и потеряли архив, вам не повезло.
Однако, если вы это сделали, сохраните архивный файл сборки дистрибутива, очень хорошо!
Вы пробовали открыть это в XCode Organizer (перетащите файл в органайзер, он должен символизировать журнал сбоев). Если нет, сделайте это.
Когда вы это сделаете, есть две возможности: либо iMetroRoma
функции будут обозначены символами (что означает, что вы увидите, какая строка приводит к сбою), либо это не произойдет.
X *: Если это так, вы знаете, где происходит сбой приложения. Публикация подробной информации об этом поможет нам решить проблему для вас.
Если это не так, то автоматическая символизация в XCode не работает. Выполните следующие действия (при условии, что вы сделали все это из XCode 4):
- Из /Users/your_username/Library/Developer/Xcode/DerivedData удалите все папки.
- Из /Users/your_username/ Library/ Application Support/ iPhone Simulator удалите все папки.
- Очистите корзину.
А затем попробуйте удалить этот журнал сбоев из XCode Organizer и снова перетащите его туда. Возможно, это может символизировать это сейчас. Если он выполняет шаг X *, если нет, читайте дальше.
Теперь вам нужно будет выполнить действия, описанные в этом блоге. (Очень полезная и хорошо документированная статья).
Надеюсь, сейчас это будет символизировать, а затем перейти к шагу X *. Если это не так, я прошу прощения за то, что не смог помочь 🙂
Комментарии:
1. Привет, спасибо за помощь. Я попытался запустить symbolicatecrash с терминала, но получил это предупреждение: ## Предупреждение: невозможно использовать символы из требуемого двоичного файла: /Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.0 (9A334)/Symbols/System/Library/Frameworks/MapKit.framework/MapKit
2. У вас еще нет iOS SDK 5.0?
3. У меня есть XCode 4.2 с iOS SDK 5.0
4. Вы уверены, что это релизная версия, а не предварительная бета-версия xcode / ios SDK?
5. Я скачал его из MacAppStore. ps: Apple отправила мне 2 журнала сбоев, и я успешно обозначил один из них (я скопировал его в ветке вопросов). Это может быть полезно?
Ответ №2:
Согласно журналу сбоев, это выглядит как исключение из массива. Это означает, что вы получили доступ к массиву с индексом, который не существует. К сожалению, самая важная строка ( 3 iMetroRoma 0x0000426f 0x1000 12911
) не обозначена символом, что означает, что вам нужно искать все ваши вызовы
objectAtIndex:
и думать о том, есть ли вероятность, что может быть использован недопустимый индекс.
Комментарии:
1. Что вы имеете в виду под «обоснованием этого»? Смотрите трассировку стека исключений, кадры с 3 по 1. Поток вызовов таков: Кадр 3: метод его приложения (по адресу
0x1000 12911
), вызываемый кадром 2:objectAtIndex:
для объекта типа__NSArrayM
, который является внутреннимNSArray
подклассом. ИobjectAtIndex:
, в свою очередь, вызвал кадр 1 :objc_exception_throw
. Итак, приложение вызвало[someArray objectAtIndex:something]
иobjectAtIndex:
выдало исключение. Обычно этот метод выдает исключение только тогда, когда индекс выходит за пределы.