2014-07-10 1 views
0

이것은 구체적인 경우를 기반으로 디버깅에 대한 일반적인 질문입니다. 여기 디버거 메시지의 의미를 알 수 없음

은 엑스 코드 콘솔에서, 내가 할 메시지입니다 :

2014-07-10 10:54:34.831 MyApp[1975:60b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]' 
*** First throw call stack: 
(0x2ea83f83 0x391d0ccf 0x2e9ba7cb 0xd18ed 0xcda77 0x10818f 0xcc24b 0x107c87 0x312bb6df 0x313cf9eb 0x312bb6df 0x312ace89 0x312ac64d 0x312ac4bf 0x312abfe5 0x312a9827 0x3131333d 0x3130ffad 0x3130a56b 0x312a66e9 0x312a5851 0x31309ca9 0x338dbaed 0x338db6d7 0x2ea4ea67 0x2ea4ea03 0x2ea4d1d7 0x2e9b7ebf 0x2e9b7ca3 0x31308ed1 0x3130414d 0x108229 0x396ddab7) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

내가 따로 말할 필요가 : 발생한 문제의 종류에 나에게 힌트를주는

'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]' 

, 그것은 나에게 오히려 쓸모없는 것처럼 보인다.

그런 다음 bt 명령을 실행하여 다시 추적을 시도합니다. 내가 얻을이 :

나는 또한 BT 명령의 결과가 어디에 내 코드 뭔가하는 것은 잘못 될 수도 있습니다 찾는 많은 나에게 도움이되지 도다라는 것을 인정해야
(lldb) bt 
* thread #1: tid = 0x3db71, 0x397931f0 libsystem_kernel.dylib`__pthread_kill + 8, queue = 'com.apple.main-thread', stop reason = signal SIGABRT 
    frame #0: 0x397931f0 libsystem_kernel.dylib`__pthread_kill + 8 
    frame #1: 0x397fd796 libsystem_pthread.dylib`pthread_kill + 58 
    frame #2: 0x39743fdc libsystem_c.dylib`abort + 76 
    frame #3: 0x38a72cd6 libc++abi.dylib`abort_message + 74 
    frame #4: 0x38a8b6e4 libc++abi.dylib`default_terminate_handler() + 252 
    frame #5: 0x391d0f64 libobjc.A.dylib`_objc_terminate() + 192 
    frame #6: 0x38a891c6 libc++abi.dylib`std::__terminate(void (*)()) + 78 
    frame #7: 0x38a88d2c libc++abi.dylib`__cxa_rethrow + 100 
    frame #8: 0x391d0e16 libobjc.A.dylib`objc_exception_rethrow + 42 
    frame #9: 0x2e9b7f34 CoreFoundation`CFRunLoopRunSpecific + 640 
    frame #10: 0x2e9b7ca2 CoreFoundation`CFRunLoopRunInMode + 106 
    frame #11: 0x31308ed0 UIKit`-[UIApplication _run] + 760 
    frame #12: 0x3130414c UIKit`UIApplicationMain + 1136 
    * frame #13: 0x00108228 MyApp `main(argc=1, argv=0x27d59d04) + 116 at main.m:16 
(lldb) 

.

나는이 부분에서 너무 음수가되어이 정보를 올바르게 보지 못했기를 바랍니다. 누군가 이런 경우에가는 법을 말해 줄 수 있습니까? 디버거 콘솔에서 다른 명령을 실행하여 유용한 것을 얻으려면해야합니까?

+0

던진 예외에 대한 디버거 중단을 설치 했습니까? http://blog.manbolo.com/2012/01/23/xcode-tips-1-break-on-exceptions – Eonil

+1

예외 중단 점을 사용하십시오. 예외가 응용 프로그램에서 버블 링 된 것이 아니라 예외 소스에서 중지됩니다. – borrrden

답변

2

이러한 종류의 오류를 진단하는 가장 간단한 전략은 Xcode 디버거에서 응용 프로그램을 시작하는 것입니다. '모든 예외'중단 점을 설정했는지 확인하십시오.

  1. 왼쪽 패널에 중단 점 탐색기를 표시하십시오.
  2. 왼쪽 하단에서 '+'버튼을 누르십시오.
  3. 선택하면 예외가 감지 될 때 프로그램을 중지 중단 점을 가지고 있어야이 시점에서

'예외 중단 점 추가'. 프로그램을 실패 지점까지 실행하면 최종 전역 예외 처리기가 아니라 배열 경계 오류가 처음 감지 된 줄에서 바로 중지해야합니다.

0

좀비를 활성화하는 프로파일 링 도구를 사용할 수 있습니다. 앱이 다운되면 대부분의 시나리오에서 충돌의 정확한 위치를 보여줍니다.