본문 바로가기

Xcode

[Xcode] Breakpoint 사용하기 (3) - NSLog

지난 글 보기

 

[Xcode] Breakpoint 사용하기 (2) - LLDB

지난 글 보기 [Xcode] Breakpoint 사용하기 (1) Xcode 에서는 코드의 진행을 의도적으로 멈추고 그 시점에서의 메모리나 변수 값들을 확인할 수 있는 브레이크 포인트를 제공합니다. 이 글은 시리즈의 ��

darth-vader.tistory.com

지난 글에서 LLDB를 소개하고 사용하는 방법에 대해서 간단히 이야기했었습니다.

오늘은 1편과 2편을 응용해서 브레이크 포인트를 활용하는 방법에 대해서 알아보겠습니다.


1편에서는 브레이크 포인트를 생성할 때 멈추고자 하는 line number 를 클릭해서 생성했었습니다. Xcode 에서는 그 방법 외에도 브레이크 포인트를 생성하는 방법이 또 있습니다. 그건 바로 Navigator Area - Debug 에서 하단의 + 버튼을 누르는 방법입니다.

 

Navigator Area - Debug
+ 버튼을 누르면 나오는 팝업

+ 버튼을 누르면 팝업이 하나 생성되며 총 7가지 종류의 브레이크 포인트가 있습니다. 이번 글에서 다뤄볼 브레이크 포인트는 Symbolic Breakpoint 입니다.

 

Symbolic Breakpoint - Edit Breakpoint

 

Symbolic Breakpoint 를 선택하면 1편에서 봤었던 Edit Breakpoint 팝업이 나옵니다. 그 때와는 달리 몇가지 옵션이 더 추가되었습니다. Symbol, Module TextField 엔 Placeholder 도 있네요. Example 을 보시면 뭔가 감이 오시나요? 이 글에서는 Symbol 영역만 사용할 것입니다.

 

UIViewController 를 상속 받은 모든 클래스는 dealloc 될 때 Action 을 실행한다.

Symbol 에는 -[UIViewController dealloc] 라고 입력하고 Add Action - Debugger command 를 선택하고 Action 란에는 po NSLog(@"#Log| %@ dealloc", $arg1) 라고 작성합니다. 감이 오시나요? Objective-C 를 하신 분이라면 더 감을 잡기 쉬우실 겁니다.

 

브레이크 포인트가 걸린다면?

 

브레이크 포인트가 걸린다면 위와 같은 화면을 마주할 것이고, UIKitCore 는 UIKit.h 라는 Objective-C 기반의 코드이기 때문에 Swift 코드는 먹히지 않고 Obejctive-C 코드를 작성해야 합니다. 마찬가지로 우리가 브레이크 포인트에 걸렸을 때 LLDB 에 코드를 작성한다면 해당 파일의 기반 언어를 선택해서 작성해야겠죠.

제가 원하는 것은 dealloc 될 때마다 매번 프로젝트가 멈추는 것이 아닌 dealloc 될 때마다 Log 를 찍길 원하는 것이니 Options 에 Automatically continue after evaluating actions 에 체크합니다.

 

이런 사전 작업을 해놓으신 다면 실제 프로젝트가 실행 중일 때 UIViewController 가 dealloc 될 때마다 로그를 작성하겠죠. 로그 내에 적당한 prefix 를 작성한다면 필터링해서 보기에 수월할겁니다. (저는 NSLog(@"\n#Log| %@ dealloc", $arg1) 이라고 작성했습니다.)

이 역시 더 나아가서는 여러분들이 응용하기 나름입니다.

 

클래스 이름은 가리고...
역시 클래스 이름은 가리고...

 

이 방법을 응용하자면 통신의 결과를 받아올 때 해당 라인에 브레이크 포인트를 걸어놓고, 브레이크 포인트의 액션에 적당한 로그 메시지를 남겨 준 뒤 Automaticcaly continue after evaluating actions 를 체크해놓으시면 브레이크 포인트를 활성화/비활성화하면서 로그 메시지도 활성화/비활성화 할 수 있습니다. 콘솔에 과도한 로그로 인해 대체 어떤 메시지가 나온 건지 확인이 불가능한 불상사를 방지할 수 있습니다. 더해서 Condition 에 어떤 조건을 작성하냐에 따라서 필요한 경우에만 로그 메시지가 나오게끔 할 수도 있겠죠.


일단 브레이크 포인트 편은 여기서 끝마치도록 하겠습니다. 혹시나 더 보충할 내용이 생긴다면 다음에 이어서 작성해보도록 하겠습니다.

도구를 사용해서 우리 모두 똑똑하고 편하게 개발합시다. (대충 lldb 에 po 뚜드리고 있으면 모르는 사람이 봤을 땐 엄청 잘해보임.)