Странный сбой приложения для iPhone на iOS 5

#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), так и в неподключенном случае я выпускаю нераспределенный объект. Почему он может произойти сбой в одной ситуации, но не в другой?