gdb是linux下的一款调试器
背景
gcc默认编译的是release版本,这个版本是不能调试的,只有debug模式才可以,需要在二进制程序的时候加上-g选项,先准备一份代码,编译为调试版
#include <stdio.h>
void fun()
{
int sum = 0;
int i = 5;
while(i >0)
{
sum = sum + i;
i++;
}
}
int main()
{
int a = 4;
int b = 5;
fun();
return 0;
}
编译调试版
gcc test.c -o test -g
可以查看程序的各个段是否可调试,是否包含调试信息
readelf -S 程序名
readelf -S 程序名 | grep -i debug
上面的debug就是可调试的信息
开始使用
输入gdb加程序名开始调试,输入quit或crtl+d退出
list/l 行号:列出源代码,接着上次的位置下列,每次列10行,可以接行号,按回车不断显示下面代码
list/l 函数名: 列出函数的源代码
run/r : 运行程序,如果没有设置断点,直接运行结束
break/b 行号: 给指定的行设置断点
info break: 查看断点信息
delete points/ 断点编号: 删除所有/指定断点
disable/enable 断点编号: 关闭或打开断点
next/n : 逐过程
step/s: 进入函数调用
break 函数名: 在函数开头设置断点
finish: 完成当前函数返回,等待命令
printf/p: 打印变量名
bt: 查看调用堆栈
display: 设置常显示
undisplay: 取消常显示
until: 跳转到指定行,不建议
c: 运行到下一个断点处
set var: 修改变量值