목차

기초 사용법


lldb의 간단한 사용방법을 순서대로 알아보려한다.

  1. 먼저 소스가 있는 디렉토리에서, 아래 명령어 처럼 -g flag를 붙여서 컴파일을 진행한다.
g++ -g my_source_file.cpp -o my_program

위와 같이 컴파일 flag를 붙여주게 되면, 컴파일 과정에서 디버깅 정보를 포함하게 된다. 이로써 가능한 동작들은 아래와 같다.

이 와 같이 디버깅에 유용한 정보가 포함되기 때문에 컴파일시 이를 포함하여 진행한다.

  1. LLDB를 실행하고 디버그 정보가 포함된 프로그램을 로드
lldb my_program
  1. 아래의 예시 처럼 break point를 지정
b main(함수) 또는 b 39(line을 나타냄)
  1. 실행
run
  1. 이때, 여러 break point를 줬다면 아래 명령어로 지속 가능
continue(다음 루틴 실행) 또는 n(다음 라인 실행)

break point를 없애고 싶다면 아래 명령어 사용한다.

breakpoint list (해당 명령을 통해서 리스트 확인)
breakpoint delete 1 (포인트 번호로 삭제)
breakpoint delete (모든 포인트 삭제)

보통은 아래와 같이 줄여서 사용한다.

b del

lldb로 데이터 섹션을 확인하는 방법


lldb를 통해 직접적으로 해당 코드의 영역을 알 수 없기 때문에, 간접적으로 확인하는 방법을 간단하게 알아보려한다.

  1. 데이터, 텍스트 영역: image dump sections 명령어를 사용해서 데이터, 텍스트 영역을 확인할 수 있다. 명령어 실행시 뒤에 실행파일을 넣어주면 해당 파일의 섹션만 볼 수 있다.
  2. 스택 영역 : 스택 영역은 일반적으로 현재 함수의 스택 프레임으로 찾을 수 있다. bt 명령으로 스택 프레임 목록을 확인하고 첫 번째에서 마지막 프레임 사이에 있다면 스택 영역에 속할 가능성이 높다.
  3. 힙 영역 : 힙 영역의 주소는 동적으로 할당된 객체의 포인터를 통해 확인할 수 있다. 동적 할당된 객체 포인터와 비교하여 주소가 힙 영역에 속하는지 확인할 수 있다. (다른 방법을 못찾음..)

추가적인 명령어


print, disassemble, memory read 총 3가지 명령어들을 간단하게 알아보겠다.

Print