#iphone #crash
#iPhone #сбой
Вопрос:
Я получаю действительно странные и частые сбои в своем приложении, которое, как мне кажется, работало нормально до обновления до iOS 5 (но я не уверен в этом на 100%). В принципе, сбои часто происходят, когда я выхожу из приложения (нажимаю кнопку «Домой») и возвращаюсь. Это происходит не всегда, но часто.
У кого-нибудь были подобные сбои?
В моем отчете о тестовом полете сообщается «SIGSEGV, неизвестный сигнал».
Когда я просматриваю свои телефонные журналы, он говорит:
0 ****** 0x000e7745 Vingit 943941
1 ****** 0x000e7b5b Vingit 944987
2 libsystem_c.dylib 0x36970539 _sigtramp 48
3 QuartzCore 0x32843875 _ZN2CA5Layer16commit_if_neededEPNS_11TransactionEPFvPS0_jjPvES4_ 216
4 QuartzCore 0x32843875 _ZN2CA5Layer16commit_if_neededEPNS_11TransactionEPFvPS0_jjPvES4_ 216
5 QuartzCore 0x3284773b _ZN2CA7Context11commit_rootEPNS_5LayerEPv 34
6 QuartzCore 0x32847717 _ZN2CAL16foreach_callbackEPNS_5LayerES1_Pv 18
7 QuartzCore 0x328476ed x_hash_table_foreach 44
8 QuartzCore 0x328476bd _ZN2CA11Transaction12foreach_rootEPFvPNS_5LayerEPvES3_ 32
9 QuartzCore 0x32841455 _ZN2CA7Context18commit_transactionEPNS_11TransactionE 1052
10 QuartzCore 0x32840e57 _ZN2CA11Transaction6commitEv 314
11 QuartzCore 0x328686f1 _ZN2CA11Transaction5flushEv 44
12 QuartzCore 0x328686c3 [CATransaction flush] 34
13 UIKit 0x33168bad -[UIApplication _reportAppLaunchFinished] 40
14 UIKit 0x33200387 -[UIApplication _handleApplicationResumeEvent:] 1618
15 UIKit 0x33124961 -[UIApplication handleEvent:withNewEvent:] 1080
16 UIKit 0x331243bf -[UIApplication sendEvent:] 54
17 UIKit 0x33123d2d _UIApplicationHandleEvent 5808
18 GraphicsServices 0x33d0fe13 PurpleEventCallback 882
19 CoreFoundation 0x3115e553 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ 38
20 CoreFoundation 0x3115e4f5 __CFRunLoopDoSource1 140
21 CoreFoundation 0x3115d343 __CFRunLoopRun 1370
22 CoreFoundation 0x310e04dd CFRunLoopRunSpecific 300
23 CoreFoundation 0x310e03a5 CFRunLoopRunInMode 104
24 GraphicsServices 0x33d0efed GSEventRunModal 156
25 UIKit 0x33152743 UIApplicationMain 1090
26 ****** 0x00002dc3 main (main.m:14)
27 ****** 0x00002d6c Vingit 7532
Ответ №1:
Вам нужно будет обозначить свой журнал сбоев, прежде чем он будет иметь смысл. Для того, чтобы это удалось, вам понадобится точно такой же двоичный файл и файл dSYM, сгенерированный в процессе сборки в Xcode. Один из способов обеспечить это — использовать функцию архивирования в сборках, которые вы собираетесь распространять среди своих бета-тестеров, например, через TestFlight.
Если вы это сделали, тогда вам нужно просто открыть журнал сбоев в Xcode, и он автоматически найдет для вас правильный двоичный и dSYM-файл и преобразует адреса смещения в вашем коде в имена методов. Надеюсь, это приблизит вас к области в вашем коде, где происходит сбой.
Комментарии:
1. Он полностью дублирован. Я уже использую TestFlight и неукоснительно загружаю архивированный файл .dSYM с каждой новой сборкой.
2. Хммм … могут быть какие-то неустановленные объекты, которые автоматически удаляются iOS, пока ваше приложение работает в фоновом режиме. Можете ли вы вызвать такое же поведение при запуске из Xcode? В этом случае вам может повезти в поимке виновника, запустив его с включенными зомби.
3. Я дал вам правильный ответ, потому что вы были правы :-). Хотя я сам узнал, сначала прокомментировав половину своего приложения, а затем половину этого и т. Д. Это была незарегистрированная кнопка, которая очищалась. Вызывает беспокойство то, что XCode не обнаруживает эти ошибки.
4. Хорошо, что вы отследили это — их может быть действительно трудно найти. Вы пробовали запускать clang через сборку и анализ? Иногда он может обнаруживать эти ошибки, вызванные неустановленными объектами, если причина не является несколько отдаленной от симптома.
5. Я запустил Analyze, но, полагаю, он каким-то образом не распознал тот факт, что я выпускал нераспределенный объект. На самом деле у меня включены зомби, но при запуске в Xcode это даже не приведет к сбою. Что может быть причиной этого? Как в подключенном (к Xcode), так и в неподключенном случае я выпускаю нераспределенный объект. Почему он может произойти сбой в одной ситуации, но не в другой?