测试条件

GDB、GDBServer、JLink之间的关系
借用网上一张图

J-LINK GDBServer是J-LINK软件包里的一个软件

J-LINK GDBServer一般是配合IDE一起使用的,比如常见的RT-Thread Studio,eclipse,VS code等等。J-LINK GDBServer还分为J-LINK GDBServer和J-LINK GDBServer CL,
J-LINK GDBServer CL是J-LINK GDBServer的纯命令行本部,J-LINK GDBServer是个带UI界面的版本。RT-Thread Studio里用的就是J-LINK GDBServer CL,入下图


J-LINK工具包里是带UI界面的

需要重点配置的信息如下

配置完成后的页面如下(在JLINK硬件连接正确情况下)

到此J-LINK GDBServer的配置步骤就结束
接下来要准备GDB,
在这个连接里可以找到最新的GDB(https://www.sourceware.org/gdb/download/),进行下载安装

我这里使用的是RT-Thread Studio里已经安装好的GDB
 打卡GDB的页面如下

这时使用命令 tar ext:2331 命令建立和J-LINK GDBServer建立连接,连接成功后,J-LINK GDBServer和GDB的页面都会有对应显示。

由于GDB的命令非常多,常用命令如下
l,list指令的缩写,意为列出当前执行的源代码。同时输入指令后重复按回车等效于再次输入上次的指令。
c ,continue的缩写,在嵌入式GDB中我们不能使用RUN指令来运行代码,相应的我们需要continue指令来运行。
b ,break缩写,用于在程序中打断点,使用方式有很多种
b 16,在当前低16行代码出加断点。
b i=1,当i等于1时停止,类似于这种条件式断点的方式也是GDB独有的一种强大功能。
b main,在main函数的入口打断点。
i b ,info break缩写,显示当前设置的断点信息。如下面这个查到了在main函数处有两个断点,序号分别为1 和 2。
d break ,delet break 缩写,删除所有断点
d break 1 ,删除序号为1的断点
s,step缩写,会进入子函数的单步运行
n,next缩写,即会跳过子函数的单步运行
u,until缩写使用时后方加行号如: u 16 即运行到第16行
finish,完成并跳出当前的子函数
p,print缩写,使用时后面加变量名称如:p tmp ,用来显示变量数值
display ,使用时后面加变量名称如:display tmp ,用于跟踪变量数值,在每次执行停下时会自动显示变量数值。
bt,查看堆栈
q/Ctrl+d,使用q即quit指令或快捷键Ctrl+d来正常退出GDB
这里使用2条简单命令延时一下,第一个是查看内核寄存器,使用命令是i r,可以在GDB的窗口内看到返回的寄存器值。

另一条命令是查看断点,I b,因为没有加载调试文件,所以看不到断点信息,返回信息就是没有断点。

接下来进行命令行调试的介绍
使用RT-Thread Studio编写一段点灯程序,编译完成后下载,在终端显示能够看到打印的信息,说程序已经下载成功

将RT-Thread Studio集成额GDB拷贝至工程的Debug目录下,并运行,

使用file命令加载调试文件(filertthread.elf)

使用命令 tar ext:2331 命令建立和J-LINK GDBServer建立连接

使用b,命令设置断点在main位置(b main)

断点位置与程序main的第一条语句是一致的(line 22)

使用list命令可以查看源码,设置断点位置为main的第一条语句,在list命令下也能对应上

使用n命令,单步执行,可以看到第二条语句为rt_pin_write(LED1_PIN, PIN_HIGH);和单步执行的效果是一致的。
以上步骤重点是演示了GDB和J-LINK GDBServer的连接过程及简单的调试方法,和简单的调试命令,由于GDB的命令非常多,用的人需要自己去一点点看命令再使用。建议还是用已经集成好GDB的IDE,用起来更直观更方便。
源码:附件太大无法上传,使用任何GCC工具链编译点灯程序都行。
---------------------
作者:6552918
链接:https://bbs.21ic.com/icview-3264294-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

Logo

为开发者提供按需使用的算力基础设施。

更多推荐