[Debug] GDB, LLDB

VM

목록 보기
3/3

GDB

  • 리눅스 명령어를 기반으로 ubuntu 환경에서 디버그를 진행하려 할 때 사용한다.
  • 리눅스, 유닉스 환경에서 주로 사용

GDB Install

sudo apt-get update

  • 우선 업데이트를 진행한다.

sudo apt-get install gdb

  • 이후 gdb install 진행

컴파일 옵션

gcc 컴파일 시 -g 옵션을 부여해야 함.

-g 옵션

  • gcc 컴파일러에서 디버깅 정보 를 추가하는 옵션.
  • 이 옵션을 사용하면, 디버깅 심볼 이 실행 파일에 포함됨.
  • 심볼이 없다면 디버깅은 어셈블리 수준 에서 디버깅이 진행된다.

GDB 실행

gdb execfilename

명령어를 통해 gdb 로 실행파일을 실행시킨다.

break point

b main
이후 디버깅 진행시 필요한 곳에 break point 를 찍어준다.


run

run
run 명령어 입력 시 필요한 txt 파일등을 입력.
필요하지 않은 경우 입력 없이 run 만 진행한다.


next, n

현재 가장 마지막에 보이는 줄을 실행시킬 옵션.

위의 스크린샷 에서 가장 마지막의 fprintf() 구문을 실행시키려면 next나 n을 입력하면 된다.

하지만 next 를 통해 실행 시킬 시

현재 실행시킬 부분이 함수로 이루어진 부분이라면 함수 실행을 모두 보여주지 않고, 바로 다음줄로 넘어간다.



n 입력 시



66번 줄로 이동한 모습


step, s

next, n 명령어는 함수 실행을 건너뛰었지만, step, s 명령어를 사용하면 함수 안에 들어가서 모든 함수 실행을 살펴볼 수 있다.

현재 가장 마지막 줄의 getToken 함수의 안으로 들어가 실행 경과를 살펴보려면 step, s 입력하면 된다.

step 을 통해 getToken 함수로 들어온 모습


n, s 를 입력해두고 enter 만 입력해도 앞의 명령어가 그대로 계속 유지되면서 실행됨


tui

GDB 실행 시 한줄 씩 밖에 못보지만, 여러줄을 보고 싶다면 tui 모드를 사용하면 된다.

  1. 처음 gdb 실행 시 gdb -tui ./myprogram 명령어를 통해 실행 시키던가

이 화면에서 Enter



break point 찍혀있는 모습


  1. gdb 실행 후 tui enable 명령어를 입력하면 전환이 가능하다.


    이런 형태로 볼 수 있다.

tui 명령어 사용법도 잘 나와있음.

그 외 명령어들

print

print myvar

현재 변수의 상태를 보고싶다면 print 명령어 사용.

display

display myvar

어떤 변수를 계속해서 지켜보고 싶다면 display 명령어를 사용.

print 하지 않아도 s 나 n 을 사용할 때마다 변수 상태 변화가 보인다.

undisplay

display num
그만 보고 싶다면 display 를 통해 변수에 부여된 번호를 undisplay 명령어로 실행


bt

bt

  • 현재 함수 스택이 어떻게 관리 되고 있나 확인 가능

가장 위에 있는게 현재 실행중인 함수

exit

중간에 종료하고 싶으면 exit 사용

LLDB

  • macOS, iOS, (리눅스/윈도우도 지원) 환경에서 주로 사용
  • 더 빠르고 모듈화된 아키텍처로 성능 최적화
  • 더 직관적이고 간결한 명령어 제공

LLDB Install

gdb 와 동일하게

sudo apt-get update

  • 우선 업데이트를 진행한다.

sudo apt-get install lldb

  • 이후 lldb install 진행

기본적인 사용법은 gdb랑 똑같음.

tui 대신 gui 모드가 존재.

gui 입력 시


gui 모드 실행.

gui 모드 실행 시 s, n 입력만으로 다음으로 넘어가기가 가능하다.

F6을 통해 도움말 보면서 실행시키자.

본인도 gui 는 익숙하지 않음.

0개의 댓글