2012-05-07 8 views
1

Google의 충돌 로그를 분석하는 동안 상당히 일반적인 충돌은 내 클래스 중 하나에서 발생하지도 않는 것으로 나타났습니다. 이것들은 외부의 충돌 로그이므로 문제를 재현 할 수 없습니다.응용 프로그램이 내 코드를 거치지 않고 충돌합니다

프레임 워크를 디버깅 할 수 없기 때문에이 문제를 해결하기위한 실용적인 접근 방법이 무엇인지 궁금합니다.

내가 가진 유일한 단서는 SIGSEGV가 세그멘테이션 오류이거나 유효하지 않은 포인터 일 수 있다는 것입니다. 하지만 내 수업 이후로 말한 것처럼 은 직접적으로 관련되어있는처럼 보입니다.

충돌이 :

Exception Type: SIGSEGV 
Exception Codes: SEGV_ACCERR at 0x6b636f6c 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libobjc.A.dylib      0x365c7f94 objc_msgSend + 43 
1 CoreFoundation      0x31cd23fd -[NSObject performSelector:withObject:withObject:] + 52 
2 UIKit        0x3291cfaf -[UIApplication sendAction:to:from:forEvent:] + 62 
3 UIKit        0x3291cf6b -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30 
4 UIKit        0x3291cf49 -[UIControl sendAction:to:forEvent:] + 44 
5 UIKit        0x3291ccb9 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 492 
6 UIKit        0x3291d5f1 -[UIControl touchesEnded:withEvent:] + 476 
7 UIKit        0x3291bad3 -[UIWindow _sendTouchesForEvent:] + 318 
8 UIKit        0x3291b4c1 -[UIWindow sendEvent:] + 380 
9 UIKit        0x3290183d -[UIApplication sendEvent:] + 356 
10 UIKit        0x329010e3 _UIApplicationHandleEvent + 5826 
11 GraphicsServices     0x3572d22b PurpleEventCallback + 882 
12 CoreFoundation      0x31d4c523 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 38 
13 CoreFoundation      0x31d4c4c5 __CFRunLoopDoSource1 + 140 
14 CoreFoundation      0x31d4b313 __CFRunLoopRun + 1370 
15 CoreFoundation      0x31cce4a5 CFRunLoopRunSpecific + 300 
16 CoreFoundation      0x31cce36d CFRunLoopRunInMode + 104 
17 GraphicsServices     0x3572c439 GSEventRunModal + 136 
18 UIKit        0x3292fe7d UIApplicationMain + 1080 
19 MyApp        0x0000321f main (main.m:14) 
+0

어쩌면 정적 생성자입니까? 정적 블록은 주 응용 프로그램 (적어도 C++에서는 실행되었지만 Objective C는 다르지 않습니다.) – BigMike

+0

UIControl/UIButton의 대상이 단추를 눌렀을 때 더 이상 존재하지 않는 개체로 설정되어있는 것처럼 보입니다. –

+0

문제가 해결 되었습니까? 문제의 원인은 무엇입니까? – foogry

답변

8

이 충돌 가능성이 당신의 부분에 오류의 결과이다. 스택 추적의 맨 위에있는 줄을 거의 보지 않으면 잘못된 점에 대한 힌트를 얻을 수 있습니다.

1 CoreFoundation 0x31cd23fd -[NSObject performSelector:withObject:withObject:] + 52 
2 UIKit   0x3291cfaf -[UIApplication sendAction:to:from:forEvent:] + 62 
3 UIKit   0x3291cf6b -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30 
4 UIKit   0x3291cf49 -[UIControl sendAction:to:forEvent:] + 44 

이벤트 용으로 등록되었지만 너무 빨리 할당 취소 된 개체 (보기 컨트롤러 일 가능성이 있음)가있는 것 같습니다. 가장 좋은 방법은 디버거에 부착 된 상태에서 이것을 재현하는 것입니다. 먼저 UIControl 콜백 (UIButtons)과 같은 UIControl 콜백을 처리하는 코드를 확인합니다.

+0

"UICutton과 같은 UIControl 콜백"이 무슨 뜻인지 잘 모르겠습니다. – Besi

+0

UIControl은 일반적으로 사용자 입력을 처리 한 다음 코드를 다시 호출하여 작동합니다. 따라서 'UIButton'을 누르면 메소드를 다시 호출합니다 (예 : - (IBAction) buttonPressed : (id) 보낸 사람). 'buttonPressed :'를 포함하는 클래스가 이벤트가 발생하기 전에 할당 해제되면 그때 여러분의 어플리케이션은 충돌을 일으킬 것입니다. 'UISlitch','UISlider' 등등에 대해서도 마찬가지입니다. – Joe

+0

ApplicationDidFinishLaunching 메소드에 viewcontroller를 표시하고 있었지만 유지되지 않았습니다. 이것은 내 문제를 해결, 감사합니다 !!! – iosDeveloper

관련 문제