文章目录
前言
一、GDB调试预备工作
二、GDB的启动与退出
三、GDB中查看源代码
四、GDB断点操作
五、GDB调试指令
前言
在专栏【嵌入式Linux】应用开发篇_Linux打工仔的博客中,我们已经写了大量的源程序。但是在调试这些程序时我们都是通过printf大法和肉眼除错法。对于较大工程项目来说,这样的调试效率低。因此,有必要学习GDB调试技巧,提升瞄准bug的能力和开发效率。若涉及版权问题,请联系本人删除!
一、GDB调试预备工作
【1】源程序:包含.c源文件和.h头文件等。若工程较大,可以编写Makefile文件来管理,并在Makefile文件中添加gcc指令的选项-g。
【2】调试选项:在采用gcc指令来编译源程序时,加上-g选项来生成带有源程序信息的可执行文件,用于调试。(因此,该可执行文件会比平常的文件大)
【3】其它选项:-Wall打开所有警告;-O0关闭编译器优化。
【4】使用举例:当前源文件为hello.c,那么执行以下指令就能生成用于gdb调试的可执行文件hello。
gcc hello.c -g -Wall -O0 -o hello
二、GDB的启动与退出
【1】介绍:gdb是一个应用程序,但我们使用gdb 可执行文件的指令就能创建gdb进程。打开gdb后,目标程序并未开始执行,需要我们输入相关指令,如下所示:
【2】设置命令行参数:set args 参数1 参数2 ... 注意:这里的参数是从argv[1]开始的。
【3】查看命令行参数:show args
【4】运行目标程序:run(简写为r)从main函数开始顺序执行,若遇到断点则停留。
【5】运行目标程序:start 停留在main函数的第一行代码,往后执行需要输入continue(简写为c)。
【6】退出gdb:quit 简写为q。
三、GDB中查看源代码
【1】查看当前文件代码:list(简写为l)默认的当前文件为main函数文件,默认显示10行
- 查看指定行号:list 行号
- 查看指定函数:list 函数名
【2】切换文件查看:切换到哪个文件,哪个文件就变成了当前文件
- 查看指定行号:list 文件名:行号
- 查看指定函数:list 文件名:函数名
【3】设置显示行数:set listsize 行数
【4】查看显示行数:show listsize
四、GDB断点操作
【1】设置普通断点(当前文件):①break 行号;②break 函数名。break可以简写为b。
【2】设置普通断点(其它文件):①b 文件名:行号;②b 文件名:函数名。
【3】设置条件断点:b 行号 if 变量名=某个值。
【4】查看断点信息:i b 全称是info break。
【5】删除断点:delete指令,简写为d。
- 删除指定编号断点:d 断点编号1 ... 例如:d 4 5 8 就是删除了编号为4、5、8的断点。
- 删除连续编号断点:d 断点编号i-断点编号j 例如:d 1-5 就是删除了编号为1、2、3、4、5的断点。
【6】设置断点无效:disable指令,简写为dis。
- 无效指定编号断点:dis 断点编号1 ...
- 无效连续编号断点:dis 断点编号i-断点编号j
【6】设置断点有效:enable指令,简写为ena。
- 有效指定编号断点:ena 断点编号1 ...
- 有效连续编号断点:ena 断点编号i-断点编号j