프로젝트

GDB

NickTop 2023. 5. 7. 22:58
#include <stdio.h>

void print_object(int a, int cnt){
    printf("a:%d\n",a);
    printf("cnt:%d\n",cnt);
}

void while_loop(){
    int cnt = 1;
    int a = 1000;
    while (cnt<100){
        a = a/22;
        cnt++;
    }
}

int main(){
    while_loop();
    return 0;
}

gcc로 컴파일시 -g 옵션을 주어야 정상적으로 디버깅 가능

 

(gdb) run - 프로그램 실행

(gdb) next 또는 n : 다음 함수 라인까지 진행, 함수 호출 시 건너뜀

(gdb) step 또는 s : 다음 함수 라인까지 진행, 함수 호출 시 다음 함수로 이동

.dll (Dynamic Link Library)는 함수정보와 함수로 호출할 실행 파일만 연결하기 때문에 .dll함수에서 step해도 호출하는 함수명 정도만 볼 수 있다

(gdb) c  : 다음 breakpoint까지 실행

 

(gdb) b [파일명]:[라인] - 라인 위치에 breakpoint 추가 ** 파일명 생략 가능

 b=break

(gdb) b 11

(gdb) b - 현재위치에서 breakpoint 추가

(gdb) run
Starting program: C:\cmodule\gdb_sample.exe
[New Thread 8664.0x57ec]

Thread 1 hit Breakpoint 1, while_loop () at C:\cmodule\gdb_sample.c:11
warning: Source file is more recent than executable.
11          while (cnt<100){

(gdb) n
12              a = a/22;

(gdb) break
Breakpoint 2 at 0x7ff7e0ae14f9: file C:\cmodule\gdb_sample.c, line 12.

(gdb) b (함수명) - 특정함수명에 breakpoint 추가

 

(gdb) info break - breakpoint 정보

(gdb) info break

Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00007ff7e0ae14f7 in while_loop at C:\cmodule\gdb_sample.c:11
        breakpoint already hit 1 time
2       breakpoint     keep y   0x00007ff7e0ae14f9 C:\cmodule\gdb_sample.c:12

(gdb) d [Num] : breakpoint 삭제

(gdb) d 1
(gdb) info break
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x00007ff7e0ae14f9 C:\cmodule\gdb_sample.c:12

(gdb) p 변수명 - 변수 출력

(gdb) p a
$1 = 1000

(gdb) call (함수) - 함수 실행

(gdb) call print_object(a,cnt)
a:1000
cnt:1

8. alias (alias명) = (command)

(gdb) alias ir = call print_object(a,cnt)
(gdb) ir
a:1000
cnt:1