一般来说,GDB主要帮助你完成下面三个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
3、当程序被停住时,可以检查此时你的程序中所发生的事。
要想生成可以调试的可执行文件,需要在编译的时候加上-g选项,不用在链接的时候加,例如:
gcc -g -c main.cc
gcc -o main main.o
这样两个命令下来之后,就会生成可以调试的main可执行文件。
gdb调试命令表:
命令 | 解释 | 简写 |
file | 加载一个可执行文件,也可以在运行gdb的时候加载,两种方法都不会运行程序。例如:gdb ./main | 无 |
list | 列出可执行源码的一部分,通常在程序开始运行前执行,用来设置断点 | l |
next | 单步调试,不进入函数 | n |
step | 单步调试,进入函数 | s |
run | 运行加载了的程序 | r |
continue | 继续执行程序 | c |
quit | 退出调试 | q |
输出制定的变量的值,变量要在程序运行处可见 | p | |
break | 设置断点 | b |
info break | 查看断点的信息 | i b |
delete | 删除断点 | d |
watch | 监视一个变量的值,一旦值发生变化,程序将会被暂停执行 | wa |
help | 查看gdb的帮助信息 | h |
使用举例:
源代码:
#include <stdio.h>
int print() {
int i = 100;
printf("%d\n", i + 11);
return 0;
}
int main() {
int a;
print();
a = 110 + 1;
printf("main: %d\n", a + 111);
return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">运行gdb,我在运行的时候加载了可执行文件./main。可已在运行的时使用file ./main来达到同样的效果。</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">加载成功之后会在最下面显示:Reading symbols from 可执行文件名,,.done</span>
然后用list 命令列出源码的一部分:
使用break命令设置断点:
run这个调试程序:
使用watch监视一个变量:
被监视的变量一发生变化就会停止程序:
使用step进入函数:
使用info break命令查看断点信息,还可以看一个断电是否被执行过了:
使用print命令查看一个变量的值,等号右边才是这个变量的值:
使用delete删除断点, d 断点编号,编号可以使用info break命令来查看,上面找到的断点的编号为1:
输入continue继续运行程序,如果有断点则在断点处停止,没有则直接执行完毕,退出成可执行程序,注意不是退出gdb:
以上!