准备

一般来说GDB用于C/C程序的调试。要调试C/C程序,需要在编译时将调试信息加到可执行文件中(默认不加,加了这些调试信息后可执行文件将变大)。使用编译器(gcc/g++/clang等)的-g参数可以做到这一点。

1
$ g++ -g main.cpp -o pro

如果不加-g参数进行编译,将看不见程序的函数名、变量名,只能看见运行时的内存地址。

启动GDB

1
$ gdb <program>

program是需要进行调试的可执行文件,一般在当前目录下。

程序运行参数

制定运行时参数:

1
2
$(gdb) set args xxx	
$(gdb) set args 10 20 30

查看已设置的运行时参数:

1
$(gdb) show args

启动调试

1
2
$(gdb) run
$(gdb) r

断点

设置

1.程序在执行指定行之前停止

1
$(gdb) break line-number

2.程序在进入指定函数前停止

1
$(gdb) break function-name

3.若condition为真,程序到达指定行或函数时停止

1
$(gdb) break line-or-function if condition

4.在指定例程的入口处设置断点

1
$(gdb) break routine-name

查看

1
$(gdb) info break

清除

清除某个断点

1
$(gdb) delete break-number

清除所有断点

1
$(gdb) delete break

不同文件设置断点

1
$(gdb) break filename:line-number

其他断点类似上述操作

条件断点

1
2
$(gdb) break line-or-function if expr
$(gdb) break 46 if testsize==100

查看堆栈

1
2
$(gdb) backtrace
$(gdb) bt