GDB(GNU symbolic debugger)简单地说就是一个调试工具。它是一个受通用公共许可证即GPL保护的自由软件。
一般来说, GDB 可以帮助我们完成下面四个方面的功能:
1、启动程序,可以按照我们自定义的要求随心所欲的运行程序。
2、可以让调试程序在我们所指定的位置的断点处停止。
3、当程序停止时,可以检查此时我们的程序中所发生的事情。
4、动态的改变我们程序的执行环境
一般来说 ,GDB 主要调试的是 C/C++程序。要调试 C/C++程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的-g 参数可以做到这一点,以 main.c 源文件为例,正常情况下,使用 GCC 编译该源代码的指令如下:
gcc -g main.c -o test
main.c:
#include <stdio.h>
int main ()
{
int n = 1;
int sum = 0;
while (n <= 100)
{
sum = sum + n;
n = n + 1;
}
printf("sum = %d\n", sum);
return 0;
}
在生成包含调试信息的可执行文件的基础上,启动 GDB 调试器之后结果如下:
该指令在启动 GDB 的同时,会打印出一堆免责条款。通过添加 --silent(或者 -q、--quiet)选项,可将比部分信息屏蔽掉:
gdb常用的调试指令如下:
(gdb) break xxx (gdb) b xxx | 在源代码指定的某一行设置断点,其中 xxx 用于指定具体打断点的位置,可以是代码行号、函数名等等,我们还可以这样: break filename:lineNumber 在名称为filename的文件中的第lineNumber行打断点 |
(gdb) run (gdb) r | 执行被调试的程序,其会自动在第一个断点处暂停执行。 |
(gdb) continue (gdb) c | 当程序在某一断点处停止运行后,使用该指令可以继续执行,直至遇到下一个断点或者程序结束。 |
(gdb) print xxx (gdb) p xxx | 打印指定变量的值,其中 xxx 指的就是某一变量名。 |
(gdb) list (gdb) l | 显示源程序代码的内容,包括各行代码所在的行号 |
(gdb) info breakpoints (gdb) info b | 查看断点相关的信息 |
gdb常用调试指令操作效果如下: