1. 기본 명령어
① GDB 시작
옵션 | 설명 및 실행 예시 |
$ gdb [프로그램명] | GDB 시작 |
$ quit | GDB 종료(단축키 [Ctrl]+[D] 사용 가능) |
② 프로그램 진행
명령어 | 설명 및 실행 예시 |
$ run [arg] | 프로그램 시작(arg: 인수 전달 가능) |
$ kill | 프로그램 종료 |
$ next [n] | 다음 행 n번 수행(Default: 1번 수행), 서브루틴을 호출하면서 계속 수행 |
$ step [n] | 다음 행 n번 수행(Default: 1번 수행), 함수가 있으면 함수 내부에서 한 줄씩 수행 |
$ u | 현재 루프 탈출 |
$ finish | 현재 함수를 수행하고 탈출 |
$ return | 현재 함수를 수행하지 않고 탈출 |
③ 정지점 및 감시점
명령어 | 설명 및 실행 예시 |
$ break [point] | 정지점 추가(point: 줄 번호 또는 함수명) |
$ clear [point] | 특정 줄이나 함수에 있는 정지점 지우기 |
$ delete | 모든 정지점 지우기 |
$ watch [변수명] | 감시점 추가(지정한 변수의 값이 바뀔 때마다 브레이크 되고, 이전 값과 현재 값이 출력됨) |
$ info break | 현재 정지점 및 감시점 상태 출력 |
④ 정보 출력(소스 코드, 변수, 스택)
명령어 | 설명 및 실행 예시 |
$ list [num1] [num2] | 줄 num1~num2 사이의 소스코드 출력 (Default: 현재 위치에서 10줄) |
$ print [변수명] | 해당 변수의 값 출력 |
$ display [변수명] | 해당 변수의 값을 디버깅을 진행할 때 마다 출력 |
$ info locals | 현재 함수의 모든 지역변수 출력 |
$ backtrace | 프로그램 전체 스택 프레임 출력 |
2. 디버깅 예시
GCC 컴파일 후, GDB 실행
GCC 컴파일 시, 반드시 –g 옵션을 사용해야 GDB로 디버깅이 가능함

list 명령어로 C 소스 코드 확인

break 명렁어로 main 함수가 시작될 때를 정지점으로 추가함
run 명령어로 프로그램을 실행하면, main 함수의 첫줄에서 프로그램이 정지됨

watch 명령어로 감시점 추가,
i b(info break) 명령어로 정지점과 감시점 확인

n(next) 명령어를 계속 수행하면,
정지점과 감시점을 만날 때마다 정지되는 것이 확인됨
감시점에서는 변수 I에 대한 Old value와 New value가 출력됨

정지점과 감시점 없이 run한 경우

s(step) 명령어를 수행하다가 함수 내부에 진입한 경우, 스택 프레임에 반영됨
main()에서 func()를 호출하고, func()에서 printf()를 호출하였음이 확인됨
'Linux > Linux 과제' 카테고리의 다른 글
[임베디드 과제] make와 gcc로 C 프로그램 컴파일 (0) | 2022.10.11 |
---|---|
[임베디드 과제] 클랭(Clang) 컴파일러 (0) | 2022.10.11 |
[임베디드 과제] GCC, G++ 컴파일러 이해 (0) | 2022.10.10 |
[임베디드 과제] Bash Shell 프로그래밍 간단 예제 (0) | 2022.10.04 |