簡體   English   中英

間歇性SIGABRT和SIGSEGV在iOS應用中崩潰

[英]Intermittent SIGABRT and SIGSEGV crashes in iOS app

我一直注意到我的iOS應用程序中的一些崩潰問題。 但是,我無法觀察到我的任何設備發生的崩潰,因此我依賴於用戶發送給我的崩潰日志。 這是3個看起來類似的符號化崩潰日志的示例(我在線程0堆棧跟蹤之后切斷了所有內容,其余崩潰日志似乎沒有任何有用的信息):

崩潰日志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類的任何記錄,因此我猜測在調用類方法之前發生了某些情況。

之所以得到這個,是因為您打電話給[alert show]; 從后台線程(來自grabData )。

最快的解決方案:

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

我知道您(一年前)已經解決了它,但是也許它將對其他人(例如我)有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM