XCode에서 디버깅 모드로 테스트 중인 앱이 뭔가의 오류로 죽었다. 그런데 죽은 곳을 알 수가 없을 때가 있다. 디버거의 트레이스는 main을 가리키고 있는 경우가 많다. 이 경우 로그창의 메시지를 이용해 간접적으로 원인을 알 수도 있지만 실제 원인은 알 수 없는 경우도 많다.
이런 경우 중 다수가 아마도 NSException 로 정의된 예외가 발생했을 경우다. 예를 들어 NSArray에서 크기를 벗어나는 index를 참조했을 경우 등등 다양한 Exception이 발생할 수 있다.
예외가 발생하는 위치를 파악하기 위해 도움을 주는 방법 중 하나가 브레이크 포인트를 거는 것이다. 그냥 일반적으로 사용하는 것이 아닌 예외 브레이크 포인트 (Exception Breakpoint) 이다. 이걸 걸어두면 예외사항이 발생하는 곳에서 트레이스가 잡힌다.
Exception Breakpoint를 거는 방법은 간단하다. Breakpoint Navigator(단축키 Command-6)화면을 띄워보자.
좌측 하단에 보면 + 버튼이 보인다. 이 버튼을 눌러보자.
단번에 알 수 있다. Add Exception Breakpoint를 선택하자.
몇 가지 옵션이 있으니 필요한 대로 골라보고 Done 버튼을 누르면 예외 브레이크포인트가 걸린다.
이제 남은 일은 문제를 일으켜서(-_-) 원인을 파악하는 것이다. 다만 이렇게 한다 해도 단번에 원인을 파악하기 쉽다는 건 아니지만 조금은 더 도움이 된다.
PS. 이런 예외 처리는 코드로 제대로 처리해 두는게 당연히 우선일 것이다. Objective-C에서도 Exception Handling이 가능하다.
Popular Posts
-
예전에 Vim에서 tags 파일 경로를 부모 디렉토리들로 지정해서 자동으로 태그를 지정하는 방법 을 포스팅 했던 적이 있다. 하지만 Emacs에서는 동일한 형태로 지정을 해서 사용하는게 안되었다. 이런 기능을 원했지만 검색으로 찾을 수는 없었다. ...
-
제목대로 나는 안드로이드를 혐오하는데... 그 이유를 적기 보단 경험담을 적어볼까 한다. 직접 경험한, 그리고 주변 사람들의 경험담이다. 물론 글로 표현하기 위해 과장하거나 고쳤다 -_-; [참고] 이 글은 2011년 5월 경에 쓰여진 글입니다. ...
-
이번엔 iOS SDK 기반 Objective-C에서도 웹페이지를 비동기로 긁어오는 기능을 하는 코드를 메모해본다. (NS 계열 API이니 아이폰/아이패드/Mac OS X에서 다 쓸 수 있을 듯)
-
내 나이대도 이제는 젊다고 하기에는 힘든(?) 수준으로 치닫고 있다. 세월의 흐름이 너무 빨라서 아쉽고 벅차고 숨차기는 하지만, 이럴 때 일 수록 추억을 떠올려 보면 나름 재미있는 세월을 보냈구나 생각이 든다. 이참에 옛날 옛적에 쓰던 구식 컴퓨터...
-
메소드(Method)란 클래스에 정의된 클래스 멤버 함수를 의미한다. 스위프트(Swift)에서는 클래스 뿐만 아니라 구조체에서도 동일하게 이 메소드를 정의 할 수 있다는 특징이 있다.
-
블로그 검색 유입 경로 중 동영상 플레이어에 대한 검색어가 많아서 이와 관련된 글을 하나 써 보자 한다. 주제는 개인적으로 사용해 본 Mac OS X 용 동영상 플레이어 및 소감. (내용이 길어질 것 같기에 스크린샷은 생략 ~_~)
-
이 글은 새 위치 로 옮겨지며 이 곳에서는 더이상 유지보수되지 않습니다. Emacs Lisp 코드도 사람이 작성하든 AI가 작성하든 버그가 없을 수가 없다. 그 중에서 가장 사람을 괴롭히는 버그로 사용성을 떨어뜨리는 퍼포먼스 문제가 있다. 키를 하나 ...
-
이 글은 새 위치 로 옮겨지며 이 곳에서는 더이상 유지보수되지 않습니다. 어느 날 또다시 찾아온 식사 메뉴 선정이라는 고뇌의 시간, 어찌하나 한참을 고민했지만 답이 나오지 않았는데 "한동안 안 먹었으니 치킨 시켜 먹을까?" 하는 생각...
-
스크린샷으로 결론을 이미 정리해 버렸다 이 글은 새 위치 로 옮겨지며 이 곳에서는 더이상 유지보수되지 않습니다. HTML에는 몇몇 문법에 사용되는 문자를 표기하기 위해 독특한 표기 문법을 가지고 있다. 정확히 말해서 그 상위 개념인 XML이나 SGML...



0 comments:
댓글 쓰기