본문 바로가기
운영체제/Linux

Linux ] gdb 디버거 사용법

by eteo 2022. 10. 9.

 

-g 옵션을 넣고 컴파일 한다.

gcc main.c -g -o main

컴파일 최적화 옵션은 사용하지 않는 것이 좋다.

 

 

gdb 실행파일명으로 실행한다.

gdb ./main

또는 gdb로 실행중인 프로세스의 식별자인 PID를 load 하는 것도 가능하다.

 

 

 

 

소스코드 보기

  • l : main 심볼부터 소스코드 출력
  • l 10: 10행을 기준으로 소스코드 출력
  • l - : 이전행의 소스 출력
  • l func: 해당 함수의 소스 출력
  • l file.c:func: 해당 파일의 해당 함수 부분을 출력
  • l file.c:10 : file.c 파일의 line 10을 기준으로 출력
  • set listsize 20 : l 명령의 기본 출력 코드 수를 20라인으로 설정

어셈블리 코드 보기

  • disas 라인/함수명

분기

  • jump 행번호/함수명

 

엔터를 치면 이전 명령어가 실행되기 때문에 계속 엔터를 쳐서 그 다음행의 소스코드를 출력할 수 있다.

 

 

 

 

Breakpoint 설정

  • b 행번호 : 해당 행에 Breakpoint 설정
  • b func : 함수 시작 부분에 Breakpoint 설정
  • b *0xFFFF8040 : 해당 주소에 Breakpoint 설정 (어셈블리 디버깅 시 사용)
  • d : 모든 Breakpoint 지우기
  • cl 행번호/함수명 : 해당 Breakpoint 지우기
  • b 10 if var == 0 : 10번 라인에서 var 값이 0일 때 break
  • info b : 모든 브레이크 포인트 보기
  • disable/enable br : 모든 브레이크 포인트 (비)활성화
  • disable/enable br 6 8 : 6, 8 번 브레이크 포인트 (비)활성화

정규표현식을 활용한 Breakpoint 설정

  • rb func : func을 포함하는 심볼에 Breakpoint 설정
  • rb ^func : func으로 시작하는 심볼에 Breakpoint 설정
  • rb TestClass:: 해당 클래스에 해당하는 심볼에 Breakpoint 설정

 

 

 

실행

  • r : 프로그램 실행
  • r arg1 arg2 : arg1 과 arg2 를 프로그램 인자로 실행
  • k : 프로그램 실행 종료
  • n : 다음 행으로 이동 (함수 안으로 들어가지 않음)
  • s : 다음 행으로 이동 (함수 안으로 이동)
  • c : 다음 브레이크 포인트까지 실행
  • u : 현재 루프를 빠져나갈 때까지 실행
  • finish : 함수 수행 후 빠져나감
  • return : 함수 수행 중단 후 빠져나감 return -1 로 옵션 지정 가능
  • advance 20: 현재 파일의 행번호 20까지 실행
  • advance file.c:10: 해당 파일의 행번호를 만날 때까지 실행

 

 

 

WatchPoint 설정 : 특정 변수의 특정 변수의 값이 바뀔 때 마다 Breakpoint 걸린다.. 이 때, 지역변수에 대한 WatchPoint 설정은 지역변수의 스코프 내에 들어왔을 때 설정하여야 한다.

  • watch 변수명 : 변수에 값이 쓰여질 때 마다 브레이크
  • rwatch 변수명 : 변수의 값이 읽혀질 때마다 브레이크
  • awatch 변수명 : 변수에 값이 쓰이거나 읽혀질 때마다 브레이크

 

 

 

 

 

 

변수 및 레지스터 값 확인

  • p 변수명 : 해당 변수의 값 출력
  • p/서식지정자 변수명 : 해당 출력 형식으로 변수 값 출력
  • p *ptr / p **ptr : 해당 포인터 변수의 주소에 저장되어 있는 값 확인
  • p *ptr@4 : ptr이 가르키는 길이가 4인 배열의 값 출력
  • p $레지스터명 : 특정 레지스터의 값 확인
  • set variable 변수명 = 0 : 중단점에 걸린 상태에서 변수 값을 변경
  • display 변수명 : 중단점에 걸릴 때마다 해당 변수의 값 출력
  • info display / delete diplay / disable display / enable display
  • ptype 변수명 : 해당 변수의 타입 출력

  • info locals : 현재 스코프에서 모든 지역변수의 값들을 확인
  • info variables : 모든 전역변수의 값 확인
  • info registers : 모든 레지스터의 값 확인
  • info all-registers : 레지스터 전체 출력 (MMX 포함)
  • info args : 함수 호출 시 인자를 출력
  • info catch : 함수의 예외 핸들러를 출력

 

 

스택 프레임 정보 확인

  • bt : 전체 스택 프레임 출력. 콜스택을 확인하여 역추적할 수 있다.
  • frame n : 스택 번호의 스택 프레임으로 이동
  • info f n : 해당 번호의 스택 프레임 내용 출력
  • up 상위 스택 프레임으로 이동
  • down 하위 스택 프레임으로 이동