2012-11-12 3 views
2

iOS 애플리케이션에서 충돌 문제가 발생했습니다. 그러나 내 장치에서 충돌을 관찰 할 수 없어서 사용자에게 보낸 충돌 로그를 사용하고 있습니다. 여기에 3 유사하게 보이는 symbolicated 충돌 로그의 샘플이다 (I 스레드 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에 대한 참조가 있으며 응용 프로그램에 인쇄 기능이 있지만 인쇄 팝업과 상태 편집 팝업을 동시에 열 수는 없으므로 확실하지 않습니다 충돌하는 동안 인쇄판을 닫으려고하는 이유는 무엇입니까?

누구든지이 문제를 어떻게 공격 할 수있는 힌트 나 전략이 있습니까? (I 최신 아이폰 OS SDK에와 엑스 코드 4.5.1 건물입니다.)

편집 :

[Utils msgBox:@"Entry required" message:@"Please enter a value for the Status field before tapping Save."]; 

그리고이 이후

아마의 대상이 될 것입니다 : 여기에 응용 프로그램 코드의 잘못된 행은 다음 댓글이 여기에 MSGBOX에 대한 Utils.m의 클래스 방법 : 스택 추적이의 Utils 클래스로가는 모든 기록이 표시되지 않는 것처럼

+ (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]; 
} 

, 뭔가가 클래스 메소드 전에 무슨 일이 일어나고 있음을 추측하고있다 호출됩니다.

+2

모두 StatusEditViewController.m의 75 번째 행을 의미하는 것 같기 때문에 그 동네에서 무슨 일이 일어나고 있는지 알면 좋을 것입니다. –

+0

나는 코드 라인을 포함하도록 위의 질문을 편집했다. 잘하면 도움이 될 것이다. –

+0

경고보기에 대한 대리인이 없기 때문에 큰 가능성이 배제됩니다. Xcode의 Product-> Analyze 메뉴 옵션은 경고를 표시합니까? –

답변

0

배경 스레드 (grabData)에서 [alert show];을 호출했기 때문에이 메시지가 표시됩니다.

가장 빠른 해결책 :

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

당신이 이미 (년 전에) 그것을 해결 알고 있지만 어쩌면 (나 같은) 다른 사람을 도움이 될 것입니다.

+0

와우, 내가 어떻게 이것을 고려하지 않았는가? 나는 이것을 여기에 넣고 잠시 동안 그것을 시험해보고 충돌의 수가 점점 줄어들는지 보게 될 것이다. 감사. –

관련 문제