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이 강력한 편집기로써 군림하게 된 건 편한 키맵, 정규표현식, 그리고 이 매크로 레코딩 기능이 있기 때문이라고 감히 주장하고 싶다. 레코딩 기능은 사용자가 입력하는 키를 그대로 녹화해서 매크로로 만들어 주는 기능이다. 이 기능에 대해 간단히...
-
이번 글은 굉장히 유명한 수학 함수 3가지를 적어보는 글입니다. 그리고 오랜만에 구어체가 아닌 존대말(?)로 쓰는 글이기도 하겠네요. 이번에 언급하는 함수 세 가지, 즉 ceil(), floor(), round() 함수는 C 언어 시절부터 쓰이...
-
편의성 측면도 있겠지만 애플에서 Swift 를 강력하게 밀고 있기에 아무래도 macOS나 iOS용 개발 언어는 Swift 가 주류가 될 가능성이 높다. 하지만 그렇더라도 한동안은 Objective-C 와의 동거를 끝낼 수는 없을 것이다. 그 증거로 애...
-
sigsegv 검색을 통해 유입된 내역이 하나 보여서 잠깐 설명.
-
이번 이야기는 Raw Pointer 대충 번역하면 생포인터에 대한 이야기다. 쉽게 표현하자면 이 생포인터는 타입이 지정되지 않은(Untyped) 포인터이다. 포인터 시작편에서 언급했지만 이 생포인터는 타입이 명시되지 않았다는 점 때문에 Swift 에서...
-
지금까지 iOS 및 macOS 용 앱을 여럿 만들어 왔지만 레이어에 대해서는 자세히 공부해 본 적이 없었다. 블로그에 글 쓸 주제도 적어지고 마침 필요도 하기에 레이어에 대해 공부해 보면서 알게 된 것들을 정리해 보려고 한다.
-
Vim에서 한글을 입력하다 ESC를 눌러서 편집모드를 빠져 나와서 다른 커맨드를 입력하려 할 때 동작 안하는 경우가 있다. 한글 상태라서 키 입력을 제대로 못 알아먹는 상태인데 수동으로 영문으로 바꿔주면 되긴 된다. 이런 불편함으로 인해 영어만을 사용...
-
개인적으로 윈도우를 오랫동안 사용하다 맥을 처음 사용했을 때 용어나 각 앱의 이름이 뭔지 몰라서 막막했던 시절이 있었다. 그 때를 회상하며 약간 헷갈리거나 알 수 없는 용어들을 한번 정리해 볼까 한다.



0 comments:
댓글 쓰기