我一直在注意到iOS應用程序中的一些崩潰問題。但是,我一直無法觀察與我的任何設備的崩潰,所以我依靠從用戶發送給我的崩潰日誌。下面是3個外觀類似symbolicated崩潰日誌的樣本(我切斷線程0堆棧跟蹤後一切,崩潰日誌的休息並沒有出現有任何有用的信息):在iOS應用程序中發生間歇性SIGABRT和SIGSEGV崩潰
崩潰日誌1:
Date/Time: 2012-11-07 16:40:21 +0000
OS Version: iPhone OS 6.0 (10A403)
Report Version: 104
Exception Type: SIGABRT
Exception Codes: #0 at 0x3c210350
Crashed Thread: 0
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00011350 __pthread_kill + 8
1 libsystem_c.dylib 0x0006b973 abort + 95
2 libc++abi.dylib 0x00003d4f abort_message + 75
3 libc++abi.dylib 0x00000ff9 default_terminate() + 25
4 libobjc.A.dylib 0x00008a77 _objc_terminate() + 147
5 libc++abi.dylib 0x0000107b safe_handler_caller(void (*)()) + 79
6 libc++abi.dylib 0x00001114 std::terminate() + 20
7 libc++abi.dylib 0x00002599 __cxa_current_exception_type + 1
8 libobjc.A.dylib 0x000089d1 objc_exception_rethrow + 13
9 CoreFoundation 0x00008f21 CFRunLoopRunSpecific + 457
10 CoreFoundation 0x00008d49 CFRunLoopRunInMode + 105
11 GraphicsServices 0x000052eb GSEventRunModal + 75
12 UIKit 0x00057301 UIApplicationMain + 1121
13 TheApp 0x000c7c17 -[StatusEditViewController grabData] (StatusEditViewController.m:75)
崩潰日誌2:
Date/Time: 2012-10-25 14:46:23 +0000
OS Version: iPhone OS 5.1.1 (9B206)
Report Version: 104
Exception Type: SIGABRT
Exception Codes: #0 at 0x35d1b32c
Crashed Thread: 0
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x35d1b32c __pthread_kill + 8
1 libsystem_c.dylib 0x34efc29f abort + 94
2 libc++abi.dylib 0x35513f6b abort_message + 46
3 libc++abi.dylib 0x3551134d _ZL17default_terminatev + 24
4 libobjc.A.dylib 0x338c9357 _objc_terminate + 146
5 libc++abi.dylib 0x355113c5 _ZL19safe_handler_callerPFvvE + 76
6 libc++abi.dylib 0x35511451 _ZdlPv + 0
7 libc++abi.dylib 0x35512825 __cxa_current_exception_type + 0
8 libobjc.A.dylib 0x338c92a9 objc_exception_rethrow + 12
9 CoreFoundation 0x35bfb50d CFRunLoopRunSpecific + 404
10 CoreFoundation 0x35bfb36d CFRunLoopRunInMode + 104
11 GraphicsServices 0x33996439 GSEventRunModal + 136
12 UIKit 0x333d3cd5 UIApplicationMain + 1080
13 TheApp 0x000c7c17 -[StatusEditViewController grabData] (StatusEditViewController.m:75)
,尤其是混亂,崩潰日誌3:
Date/Time: 2012-11-12 11:00:21 +0000
OS Version: iPhone OS 5.1.1 (9B206)
Report Version: 104
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x7142fa3c
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x314d8f78 objc_msgSend + 15
1 UIKit 0x31c1d6d7 -[UIPrintPanelViewController dismissPrintPanel:animated:] + 50
2 UIKit 0x31c920dd __73-[UIPopoverController _completionBlockForDismissalWhenNotifyingDelegate:]_block_invoke_0 + 284
3 UIKit 0x318db4db -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 214
4 UIKit 0x318d5aab -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 470
5 UIKit 0x318db3d5 -[UIViewAnimationState animationDidStop:finished:] + 52
6 QuartzCore 0x3552ec2f _ZN2CA5Layer23run_animation_callbacksEPv + 202
7 libdispatch.dylib 0x34838ee7 _dispatch_main_queue_callback_4CF$VARIANT$mp + 194
8 CoreFoundation 0x316662ad __CFRunLoopRun + 1268
9 CoreFoundation 0x315e94a5 CFRunLoopRunSpecific + 300
10 CoreFoundation 0x315e936d CFRunLoopRunInMode + 104
11 GraphicsServices 0x32ac2439 GSEventRunModal + 136
12 UIKit 0x318eecd5 UIApplicationMain + 1080
13 TheApp 0x000c7c17 -[StatusEditViewController grabData] (StatusEditViewController.m:75)
如您所見,這些崩潰日誌在線程0堆棧跟蹤中都有14個條目(不確定是否爲巧合),而底部的項目與應用程序中的代碼行相同。這行代碼是非常無害的,它只是調用一個類方法,在編輯視圖控制器中輸入的數據無效的情況下顯示UIAlertView,傳入的字符串是常量而不是變量。
在崩潰日誌3中,引用了UIPrintPanelViewController,雖然我的應用程序具有打印功能,但無法同時打開打印彈出窗口和狀態編輯彈出窗口,所以我不確定爲什麼它會說它正試圖在撞車期間解僱印刷面板。
有沒有人有任何提示或策略,我可以如何解決這個問題? (我建立針對最新的iOS SDK,並和Xcode 4.5.1。)
編輯:這裏是代碼的應用程序出錯行:
[Utils msgBox:@"Entry required" message:@"Please enter a value for the Status field before tapping Save."];
而且因爲這很可能將是主題接下來的評論,這裏是Utils.m類方法MSGBOX:
+ (void)msgBox:(NSString *)inTitle message:(NSString *)inMessage
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:inTitle
message:inMessage
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
由於堆棧跟蹤沒有顯示的進入的utils的類中的任何記錄,我猜的東西是該類方法之前發生的事情叫做。
因爲它們似乎都涉及StatusEditViewController.m的第75行,所以很高興知道該附近發生了什麼。 –
我已經編輯了上面的問題來包含代碼行,希望它會有所幫助。 –
由於您沒有提供警報視圖的委託,因此排除了一個很大的可能性。 Xcode的Product-> Analyze菜單選項是否會顯示任何警告? –