gdb调试
什么是gdb
gdb的安装
Ubantu系统
apt install gdb
CentOS系统
yum install gdb
调试前的准备
① 写一个会发生错误的代码test.c
#include <stdio.h>
void f(int a[])
{
for(int i=0; i<200; i++)
{
a[i] = i;
}
}
int main(int argc, char const *argv[])
{
int a[100];
f(a);
return 0;
}
② 如果希望编译后的程序可以被调试,必须在编译的时候加入-g选项
gcc test.c -o test -g
man手册中对 -g 选项的介绍
③ 启用gdb调试器
gdb test
基本调试命令
| 命令 | 缩写 | 说明 |
|---|---|---|
| list | l | 浏览待调试的语句,可以理解为cat命令 |
| break | b | 设置断点,b 20表示在第20行设置断点;条件断点,b 20 if i==100表示当且仅当变量i等于100时,第20行的断点生效 |
| delete | d | 取消断点,d 20表示取消第20行的断点 |
| run | r | 启动待调试程序,直至遇到断点 |
| next | n | 让程序运行到下一句,如果是函数调用,不进入函数内部 |
| step | s | 让程序运行到下一句,如果是函数调用,则进入执行第一条语句。如果该函数为库函数,是无法进入的 |
| p | 查看变量的值,p i表示查看变量i的值 | |
| continue | c | 继续运行程序,直至遇到断点 |
| quit | q | 退出gdb调试器 |
调试步骤演示
① 浏览待调试的语句

② 在第13行设置断点

③ 启动待调试程序

④ 单步运行,进入函数内部

⑤ 查看变量i的值

⑥ 运行20步,查看栈内存信息

⑦ 设置条件断点

⑧ 发现问题:数组已经越界,但程序仍在运行

⑨ 退出gdb调试器











