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
-
개인적으로 윈도우를 오랫동안 사용하다 맥을 처음 사용했을 때 용어나 각 앱의 이름이 뭔지 몰라서 막막했던 시절이 있었다. 그 때를 회상하며 약간 헷갈리거나 알 수 없는 용어들을 한번 정리해 볼까 한다.
-
iTerm2에서 tmux를 이용해 페인(pane)을 나누었을 경우 화면이 깨지는 케이스가 있다. 예를 들자면 아래 스크린샷 같은 경우이다.
-
준비 우선은 정보부터 수집. 도데체 부트캠프냐 뭔지 잘 이해가 되게 설명해 주는 곳이 잘 없다. 어쨌든 알아낸 바로는, 부트캠프는 일반적인 윈도우가 설치되는 PC의 BIOS를 에뮬레이션 해 주는 서비스 라는 것을 알게 되었다. 우선 ...
-
UIView와 NSView는 다르다는 것을 또다시 체험해 보는 시간(-_-). 편의상 이젠 Objective-C 코드 예제는 생략하고 Swift 코드 예제만 남긴다. 어차피 메소드나 프로퍼티 명은 거의 동일하니... [참고] 이 글은 NSView ...
-
내 나이대도 이제는 젊다고 하기에는 힘든(?) 수준으로 치닫고 있다. 세월의 흐름이 너무 빨라서 아쉽고 벅차고 숨차기는 하지만, 이럴 때 일 수록 추억을 떠올려 보면 나름 재미있는 세월을 보냈구나 생각이 든다. 이참에 옛날 옛적에 쓰던 구식 컴퓨터...
-
CPU의 놀고있는 논리회로를 괴롭힐 수 있는게 바로 논리 제어(Conditional Control)다. 이번에는 이 논리(Logical)와 관련된 부분을 살펴보자.
-
CAShapeLayer 는 Shape 를 그리기 위한 CALayer 기반 클래스이다. 다르게 말하면 다각형 혹은 폴리곤을 그리기 위한 용도라고 볼 수 있다.
-
기초적이지만 알아두면 나쁠 건 없는 스위프트(Swift)의 Collection Type (주로 Array) 활용 메소드 map, filter 그리고 reduce를 간단히 복습해보는 글. 추가로 zip에 관해서도 정리해 보자. 이미 애플의 스위프트 ...
-
Xcode에서 프로젝트를 생성하면 기본 타겟 하나와 Test타겟이 생성된다. 여기서 프로젝트 이름과 동일한 이름의 기본 타겟에는 Release와 Debug를 위한 세팅이 별도로 마련되어 있다. 대게 Xcode에서 앱을 실행시키면 디버그(Deb...
-
말이 약간 어렵지만 '앱 내부에 시그널 패스가 연결되지 않은 곳에 메시지를 어떻게 던질 것인가' 라는 의문이 나온다면 NSNotificationCenter 를 쓰는 것이 답이다. 좀 더 단순히 이야기 하자면, 앱 내에서 아무 데서나 메시...



0 comments:
댓글 쓰기