[Xcode] Breakpoint를 이용한 디버깅 툴 응용

[Xcode] Breakpoint를 이용한 디버깅 툴 응용

문제를 해결하기 위해서는 디버깅을 해야하는데, 좋은 디버깅 도구가 있음에도 프린트 문을 쓰거나 po 명령어만 쓰고 있는 자신을 발견하여, 좀 더 좋은 도구의 사용법을 익히고자 정리 해 둡니다.

signal SIGABRT break point

프로그래밍을 하다 보면, 어디서 왜 죽었는지도 알기 전에 Thread 1: signal SIGABRT 빨간 라벨이 나와서 매우 분노한 일이 많았습니다. 이럴 때 어디서 죽는 건지 브레이크 포인트도 걸 수 없는데 어떻게 해야할까요?

브레이크 포인터 네비게이터로 간 후, 왼쪽 하단에 Exception Breakpoint를 누른 후 아무 곳이나 클릭 한 후 다시 실행 시켜 줍니다. 이번에는 Exception이 발생한 지점에서 멈춰있는 것을 알 수 있습니다. 브레이크 포인트를 걸지도 않았는데 말이죠. 그 다음은 브레이크 포인트가 걸려있는 지점을 살펴 보아야겠죠?

브레이크 포인트로 로그 남기기

원하는 곳에 브레이크 포인트를 걸고 값을 출력 해 본 적있으신가요? 예를 들면, 스크롤뷰에서 화면내 이미지의 마지막 순간 값을 출력 해 보려고 했던 경험 저는 많은데요. 스크롤 할 때마다 계속 브레이크 포인트에서 걸려 매우 난감했던 순간이었습니다.

이럴 때는 원하는 곳에 브레이크 포인트르 지정하고, 브레이크 포인트를 우클릭 합니다. edit breakpoint 를 누르면 이름과 조건을 설정할 수 있습니다. 하지만 우리가 필요한 기능은 Action이 Debbuger Command 입력란에 우리가 항상 브레이크 포인트가 걸리면, 입력해주는 lldb 명령어를 입력해줍니다. 예를 들면, po self.contentsOffset 과 같이 말입니다. 그리고 Automatically continue…를 체크 해주면, 이제 멈추지 않고 커맨드창에 출력됩니다.

더 나아가서, Action에 값을 Debbuger Command이 아닌 Log Message로 바꾼 뒤, @exp@ 처럼 @사이에 변수를 적어 커맨드 창에 로그를 남길 수 있습니다. 이 때 커맨드 창 왼쪽 하단에 All Output 대신에 Debbuger Output으로 바꿔주면 내가 설정한 로그들만 출력되도록 할 수 있습니다. 이러면 내가 살펴보고 싶은 상황을 좀 더 편리하게 살펴볼 수 있겠죠?

댓글

이 블로그의 인기 게시물

[IOS] AppDelegate는 뭐하는 녀석이지?

[git] git의 upstream과 origin 헷갈리는 사람 손!

[git] Github 이슈 라벨(issue labels)