지난 글에서 LLDB를 소개하고 사용하는 방법에 대해서 간단히 이야기했었습니다.
오늘은 1편과 2편을 응용해서 브레이크 포인트를 활용하는 방법에 대해서 알아보겠습니다.
1편에서는 브레이크 포인트를 생성할 때 멈추고자 하는 line number 를 클릭해서 생성했었습니다. Xcode 에서는 그 방법 외에도 브레이크 포인트를 생성하는 방법이 또 있습니다. 그건 바로 Navigator Area - Debug 에서 하단의 + 버튼을 누르는 방법입니다.
+ 버튼을 누르면 팝업이 하나 생성되며 총 7가지 종류의 브레이크 포인트가 있습니다. 이번 글에서 다뤄볼 브레이크 포인트는 Symbolic Breakpoint 입니다.
Symbolic Breakpoint 를 선택하면 1편에서 봤었던 Edit Breakpoint 팝업이 나옵니다. 그 때와는 달리 몇가지 옵션이 더 추가되었습니다. Symbol, Module TextField 엔 Placeholder 도 있네요. Example 을 보시면 뭔가 감이 오시나요? 이 글에서는 Symbol 영역만 사용할 것입니다.
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 뚜드리고 있으면 모르는 사람이 봤을 땐 엄청 잘해보임.)
'Xcode' 카테고리의 다른 글
[Xcode] M1 'cyclone' is not a recognized processor for this target 해결법 (0) | 2022.07.27 |
---|---|
[Xcode] Cocoapods 를 사용하는 경우 M1 시뮬레이터 빌드가 안되는 문제 (1) | 2021.05.13 |
[Xcode] libSwiftPM.sylib 플러그인을 사용하는 동안 Xcode이(가) 예기치 않게 종료되었습니다. (0) | 2021.04.05 |
[Xcode] Breakpoint 사용하기 (2) - LLDB (1) | 2020.07.05 |
[Xcode] Breakpoint 사용하기 (1) - 브레이크 포인트 (0) | 2020.07.04 |