본문 바로가기

iOS 개발 이야기

앱이 죽을때 디버깅 팁

일전에 읽은 글인데 다시 보니 또 새롭다. 어쩜좋아..


http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1

http://www.raywenderlich.com/10505/my-app-crashed-now-what-part-2


그래서 다시 한번 읽고 실습하고 정리.


우선 먼저 당황하지 말고 침착하기. (이거 참 어렵다)

어느 파일의 어느 라인에서 죽었는지 찾아야한다.


앱이 죽는 원인은 보통 두가지인데 하나는 SIGABRT(EXE_CRASH)이다. 

이것은 앱이 의도하지 않은 일을 했기 때문에 시스템이 앱을 죽인 것.

디버깅 영역에 에러 메시지가 뜬다.

앱이 죽은 것은 exception을 처리한 후이므로 exception breakpoint를 걸어서 exception이 던져지는 순간을 확인하자.

(breakpoint navigator 하단의 + 버튼 -> add exception breakpoint)


두번째로 앱이 죽는 원인은 EXC_BAD_ACCESS(SIGBUS or  SIGSEGV)이다.

보통 메모리 문제로 디버깅하기 더 어렵다.

좀비 오브젝트를 활성화하고 다시 실행하자.

(edit scheme -> diagnostics tab -> enable zombie objects)


워닝을 무시하지 말고 시키는대로 수정하자. (이건 원래 잘하고 있었음)


this class is not key value coding-compliant for the key XXX

이건 주로 nib이 참조하는 property가 존재하지 않을때 발생한다.


에러메시지가 나오지 않을때 디버거에게 물어보기

시뮬이면

(lldb) po $eax

디바이스면

(lldb) po $r0