【嵌入式Linux学习】调试利器之GDB快速入门指南

1. GDB调试利器

1.1. GDB简介

在单片机开发中,KEIL、IAR、ADS1.2等集成开发环境下的调试工具对程序开发有很大的帮助, 尤其是出现各种疑难杂症的bug时,往往只能通过单步调试、堆栈查询、CPU寄存器查询、 甚至是反汇编来定位问题。同样的,在嵌入式Linux的开发环境下,也有能够实现类似功能的调试器,那就是GDB(GNU debugger)。 它是一个由GNU开源组织发布的,UNIX/LINUX操作系统下的、基于命令行的、功能强大的调试工具, 是嵌入式linux开发人员必不可少的工具。

1.2. GDB的使用

1.2.1. 安装gdb工具

GDB安装命令如下:

sudo apt install gdb -y

1.2.2. 添加程序调试信息

要想调试程序,那么编译的时候必须加上“-g”选项,这样编译出来的可执行文件才带有调试信息,这一点一定要切记!

gcc -g hello.c -o hello

1.2.3. gdb启动应用程序

输入以下命令,使用gdb启动应用程序:【hello是用gcc编译器生成的】

gdb hello

运行效果如下图所示:

在这里插入图片描述
加-q参数,启动时不会打印gdb的默认信息,界面清爽干净些,如下图所示:

在这里插入图片描述

1.2.4. 查看源码

输入list(简写l)命令可以查看程序源代码,默认显示10行,通过回车键不断查看剩余代码。

在这里插入图片描述

1.2.5. 运行程序

执行run(简写r)命令用于运行代码,在程序结束或者遇到断点处停下。

在这里插入图片描述

1.2.6. 设置断点

运行break(简写b)命令可以在指定行设置一个断点,断点调试是程序调试里面使用频率最高的技巧,务必熟练掌握。

设置方法为“b”命令后加上相应的行号或函数名,在这里以在第5、6行设置断点为例:

在这里插入图片描述

1.2.7. 查看断点信息

设置好断点后,执行以下命令查看断点信息:

info b

在这里插入图片描述
含义解释:

  • NUM:断点编号
  • Disp:断点执行一次之后是否还有效(keep:有效 dis:无效)
  • Enb:当前断点是否有效(y:有效 n:无效)
  • Address:内存地址

1.2.8. 单步调试

  • continue(简写c):继续执行,到下一个断点处(或运行结束)。
  • next(简写n):单步执行,跳过子函数。
  • strp(简写s):单步执行,进入子函数。

示例:在第5行设置来断点后,先输入r指令让程序运行到断点处,然后执行n指令进行单步调试, 可以看到第5行的打印信息在单步执行后,输出“111”打印信息。 如下图:

在这里插入图片描述
示例:在第6行设置来断点后,先输入r指令让程序运行到断点处,然后执行s指令进行单步调试, 可以看到程序已经进入到printf函数的内部中。继续执行c指令,可以让程序继续运行。

在这里插入图片描述

1.2.9. 查看变量

使用print(简写p)指令可以查看变量的值,用法为print+变量名

1.2.10. 清除断点

使用clear指令可以删除某一行对应的断点,用法为clear+行号

1.2.11. 运行至函数结束

使用finish指令可以让程序运行到函数结束位置。

1.2.12. 显示源代码窗口

程序运行以后,使用“layout src”命令可以显示源代码窗口,当前执行代码会高亮标志,单步调试非常方便。

1.2.13. 退出gdb

执行quit(简写q)会退出gdb调试,返回到控制台终端。

1.3. CGDB的使用

cgbd是gdb的终端界面增强版,相比windows下的visual studio而言, 它的功能显得十分轻量级而没有太多繁杂,它有上下两栏窗口,上栏的窗口支持vi编辑器的语法, 可以方便的使用它来进行字符串定位等功能。在gdb下使用“layout src”时,界面往往容易花屏, 而cgbd更加的稳定可靠。

1.3.1. 安装cgdb工具

sudo apt install cgdb -y

1.3.2. cgdb启动应用程序

cgdb hello

在这里插入图片描述

其余使用方法参考gdb,这里不再赘述!

GDB使用手册 GDB调试器使用手册(一) ................................................................................................. 1 使用GDB: ........................................................................................................................ 1 GDB简介 ......................................................................................................................... 3 GDB的作者 ..................................................................................................................... 3 GDB调试器使用手册(二) ................................................................................................. 4 GDB调试器使用手册(三) ................................................................................................. 9 运行GDB(一些详细的说明) ........................................................................................... 9 谈谈模式的设置............................................................................................................. 11 GDB调试器使用手册(四) ............................................................................................... 12 退出gdb ......................................................................................................................... 12 Shell 命令 ....................................................................................................................... 12 GDB 命令 ...................................................................................................................... 12 Command语法 ............................................................................................................... 13 GDB调试器使用手册(五) ............................................................................................... 13 输入命令的技巧............................................................................................................. 13 GDB调试器使用手册(六-1) ............................................................................................ 14 得到帮助 ........................................................................................................................ 14 在gdb下运行你的程序 ................................................................................................. 16 GDB调试器使用手册(六-2)程序环境 ............................................................................ 19 工作路径 ........................................................................................................................ 19 你程序的输入/输出 ....................................................................................................... 20 调试一个已经运行的程序: ......................................................................................... 20 GDB调试器使用手册(七) ............................................................................................... 21 结束子进程 .................................................................................................................... 21 附加的进程信息............................................................................................................. 21 对多线程程序的调试 ..................................................................................................... 22 调试多进程的程序 ......................................................................................................... 23 停止和继续 .................................................................................................................... 24 断点,观察点和异常 ..................................................................................................... 24 DB调试器使用手册(八) ............................................................................................... 25 设置断点 ........................................................................................................................ 25 设置观察点 .................................................................................................................... 27 断点和异常 .................................................................................................................... 28 DB调试器使用手册(九) ............................................................................................... 29 断点条件 ........................................................................................................................ 29 断点命令列表................................................................................................................. 31 断点菜 ........................................................................................................................ 32
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值