gdb调试

Linux嵌入式等其他场景中无调试选项,但我们在使用时需要调试时,就要使用到gdb调试工具。接下来将从使用方法和基本调试命令来介绍gdb工具。

使用方法

1. 准备可调试的程序

在编译程序时,需要加上-g选项,这样编译器会在生成的可执行文件中包含调试信息。

gcc -g -o program program.c

这里-g选项用于生成调试信息,-o program指定生成的可执行文件名为program,program.c是源文件。

2. 启动 GDB

启动 GDB 并加载可执行文件

gdb program

3. 退出 GDB

使用quit(简写q)命令退出 GDB

(gdb) q

4.小秘诀

当什么命令都不打时直接按回车键就会默认再次输入上一条命令

基本调试命令

以下是需要调试的代码

#include <stdio.h>
#include <string.h>

void f(){
    printf("this is f\n");
}

int i = 4;

int main(){
    f();
    i = 1;
    return 0;
}
运行程序

run(简写 r):开始执行被调试的程序,如果程序需要命令行参数,可以在run后面跟上参数,如(gdb) run arg1 arg2。

(gdb) r

 

设置断点

break(简写 b):在指定位置设置断点,程序执行到断点处会暂停。常见用法如下:

在某一行设置断点:(gdb) break 10,表示在源文件的第 10 行设置断点。

在某个函数入口设置断点:(gdb) break function_name,例如(gdb) break main,会在main函数入口处设置断点。

根据条件设置断点:(gdb) break 20 if x > 10,表示当变量x的值大于 10 时,在第 20 行设置断点。

我们在设置完断点之后可以使用info b去查看断点

info r

可以查看寄存器的值

可以看到我们在第四行、第八行和main函数处(第十一行)设置了断点

有设置断点当然也有删除断点

(gdb) d 断点号

单步执行

next(简写 n):单步执行程序,遇到函数调用时会将函数调用当作一步执行过去,不进入函数内部。

(gdb) n

step(简写 s):单步执行程序,遇到函数调用时会进入函数内部进行调试。

(gdb) s

继续执行

continue(简写 c):从当前位置继续执行程序,直到遇到下一个断点或程序结束。

(gdb) c

查看变量值

print(简写 p):打印变量的值。例如,要查看变量x的值,可以使用:

(gdb) p x

如果断点设置不当,程序可能还未执行到修改变量的代码行。例如,在修改变量的代码行之前设置了断点,且后续没有继续执行到修改变量的代码,那么使用p命令查看的仍然是变量的初始值。例如一下这种情况

设置调试界面的布局

layout src:开启源代码布局:

(gdb)layout src

运行时光标会停留在断点上,当我们使用命令继续运行时,光标会发生移动

当要退出时按下并释放 Ctrl 键,同时按下 X 键。松开所有按键后,再按下 A 键。

监查变量

当变量发生变化时就会停止

(gdb)watch 变量名

gdb调试工具还有更多的指令可以使用,以上列出的只是比较常用的命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值