2017-04-25 1 views
0

내 응용 프로그램이 충돌하는 부분을 감지해야합니다. 한 줄씩 디버깅을 시도했지만 갑자기 디버거가 "어셈블러 코드"(적절한 이름입니까?)에서 점프하여 충돌로 넘어 가서 말할 수 없습니다. 문제의 코드가 무엇인지 정확히 알 수 있습니다. 충돌이 발생하면 텍스트를 음성으로 보내고 인디고에 로깅합니다. 어떻게이 로그 정보? 당신은 objc_exception_throw에 중단 점을 설정해야어떻게 내 응용 프로그램이 충돌하는지,이 로그 정보 만 알고 계십니까?

TIMESTAMP Indigo[1675:621373] -[NSNull length]: unrecognized selector sent to instance 0x1a7c38ef8 
TIMESTAMP Indigo[1675:621373] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution. 
TIMESTAMP Indigo[1675:621373] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1a7c38ef8' 
*** First throw call stack: 
(0x181aeefd8 0x180550538 0x181af5ef4 0x181af2f4c 0x1819eed2c 0x181ad4ff4 0x181ad513c 0x187c28234 0x100162f8c 0x1001a2bd8 0x187f63114 0x187f6332c 0x187e1c6e0 0x187e18978 0x187e1834c 0x187dfcfbc 0x1001a55b0 0x100041da8 0x100041b8c 0x1000e7c4c 0x1820f81fc 0x18210fef8 0x1825bd804 0x182502760 0x1824f2b18 0x1825bfba0 0x1009bda10 0x1009c2b78 0x181a9d0c0 0x181a9acdc 0x1819cad94 0x183434074 0x187c83130 0x10002160c 0x1809d959c) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+2

브레이크 포인트 예외 만들기 디버거는 예외 스택 추적이 있어야합니다. Xcode는 분명히 있습니다. 이렇게하면 문제가 발생한 위치를 파악하는 데 도움이됩니다. 그것은 왼쪽보기 중 하나입니다, 정확히 말해 줄 알기 위해 Xcode가 없습니다. –

+0

* 예외 중단 점 *을 시도 했습니까? – Rikh

+0

충돌을 디버그하는 방법은 http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1을 참조하십시오. – rmaddy

답변

2

의 감각을 만들 수 있습니다. (충돌이 발생하기 전에) 엑스 코드는 그 설정을위한 몇 가지 UI의 미묘한를 가지고 있지만 가장 쉬운 방법은 스크린 샷을 파고하지 않고 그것을 할 설명, 디버거 콘솔에 명령을 입력하는 것입니다 : 다음

b objc_exception_throw 

및 인식 할 수없는 선택기 예외가 throw되면 디버거가 으로 중지하는 대신 예외가 충돌을 일으키기를 기다리는 대신 스택이 덜 유용합니다.

예외 자체도 드러납니다. 메시지 lengthNSNull에 보냈습니다. 나는 당신이 어딘가에서 모두 NSString이 될 것이라고 생각하는 객체들의 컬렉션을 가지고있을 것이라고 생각하지만, 가끔 NSNull이 그 컬렉션에 나타납니다. iOS 클라이언트 코드에서 JSON 결과를 다양한 웹 서비스에서 사용하는 것으로 보았습니다. 백엔드가 클라이언트가 예를 들어 기대하는 모든 정보를 제공하지 않을 때입니다.

UPDATE : grafically 엑스 코드의 클릭에 세트 B의 objc_exception_throw : 디버그> 중단>

+0

감사! 이것이 내가 필요한 것입니다. 애플 리케이션이 추락했을 때, Xcode는 어떤 라인이 범인인지 표시하고 그것을 고칠 수 있었다. – Josh

+0

lldb 또한 "언어 예외"중단 점 유형을 가지고 있으므로 lldb에서 'break set -E objc'을 수행 할 수 있습니다. Xcode는이 작업을 커버 아래에서하고 있습니다 ... –

관련 문제