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调试器