2012-11-12 67 views
2

我一直在注意到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的類中的任何記錄,我猜的東西是該類方法之前發生的事情叫做。

+2

因爲它們似乎都涉及StatusEditViewController.m的第75行,所以很高興知道該附近發生了什麼。 –

+0

我已經編輯了上面的問題來包含代碼行,希望它會有所幫助。 –

+0

由於您沒有提供警報視圖的委託,因此排除了一個很大的可能性。 Xcode的Product-> Analyze菜單選項是否會顯示任何警告? –

回答

0

你得到這個是因爲你從後臺線程(從grabData)調用[alert show];

最快的解決方案:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [alert show]; 
}); 

我知道你已經解決了這個問題(年前),但也許這將幫助別人(像我一樣)。

+0

哇,我怎麼沒有考慮這個?我會把它放在那裏,嘗試一下,看看崩潰的數量是否會減少。謝謝。 –

相關問題