XCode에서 lldb로 쉽게 디버깅 하기

서론

  • XCode의 lldb는 ‘Low Level Debugger’의 약자입니다. llvm의 디버거 컴포넌트를 개발하는 애플의 프로젝트
  • 즉 소스 코드 레벨에서 앱의 실행을 추적하고 버그를 찾는데 굉장히 유용
  • 이번 시간에는 lldb의 사용 법과 그 활용 방법을 통해 버그를 쉽게 캐치하는 방법에 대해 설명

lldb 실행

  • 가장 쉽게 접할 수 있는 BreakPoint를 찍으면, 앱이 멈추면서 lldb를 실행
  • 그렇다면 현재 사용하고 있는 Thread와 그 Thread에서 실행되고 있는 함수의 Stack이 담겨져 있음

  • 제가 진행하고 있는 프로젝트에는 많은 스레드를 사용하고 있는 것을 볼 수 있음
  • 아마 앱을 실행하고 나서 직후의 BreakPoint이 요인

 

  • 메인 스레드의 Stack에는 많은 함수들이 쌓여 있는 것을 볼 수 있음
  • 각 메서드의 붙어있는 숫자의 의미는 현재 BreakPoint를 기준으로 Stack의 몇 단계 상단이 있는 것인지를 보여줌
  • 그리고 각 Stack마다 잡혀있는 변수들이 다른 것은 당연

lldb의 명령어

next

  • 만약 BreakPoint에서 다음 실행 명령문으로 계속하고 싶다면, lldb에서 n명령어를 사용하거나 빨간색 화살표 아이콘을 클릭
  • BreakPoint을 특정 시점에 걸어 버그를 찾아 나갈 떄 사용하면 유용

backtrace

  • Backtrace는 현재 코드가 실행되기까지 과정을 보여주는 명령어
  • 이 명령어를 사용하면 현재 스레드에서 어떤 함수가 호출되었는지, 호출된 함수의 순서를 확인 가능
  • 만약 3개의 프레임까지만 출력하는 것을 원한다면, bt 3이라고 입력

po

  • po명령어는 가장 대중적인 lldb의 명령어. print object의 약자
  • 현재 스코프에 있는 객체의 내용을 출력하는 데 사용

그 외의 명령어 보는 법

  • lldb에는 수 많은 명령어가 있고, 더 많은 명령어를 숙지해둘수록 디버깅이 쉬워짐
  • 한 가지 방법은 help명령어를 통해서 적절한 명령어를 찾는 것이 가능
  • 두 번쨰 방법은 아래 링크를 통해 적절한 명령어를 찾는 것이 가능합니다.
    https://lldb.llvm.org/use/map.html
 

GDB to LLDB command map - 🐛 LLDB

Previous Tutorial

lldb.llvm.org