gdbgui
gdbgui是一款用Python编写的gdb前端,能在浏览器中进行可视化调试。因此该工具是可以跨平台使用的。
安装方法
python3 -m pip install –user pipx
python3 -m userpath append ~/.local/bin
使用gdbgui调试zephyr
从Zephyr调试器配置及原理一文的”调试器简介”可以了解到调试器的基本原理:无论是eclipse,vscode,ddd都是gdb本身的一个GUI前端工具,因此只要目标支持gdb调试,那么无论使用哪种gui前端都可以,而这里gdbgui也是gui前端。
启动目标板gdbserver
支援gdbserver的调试器有很多种,我使用的目标板上搭配的是DAPLink,其在PC上的Debug tool是pyocd, pyocd可以建立一个gdbserver让gdb来连接DAPLink对目标板进行调试。pyocd下启动gdbserver的命令如下
pyocd gdbserver –persist -t mimxrt1050_quadspi -bh
启动后可以看到下图,gdbserver的监听端口是在3333
连接
启动gdbgui http server
安装好gdbgui后,直接执行下面命令就可以启动gdbgui的http server
gdbgui
默认情况下gdbgui会去启动gdb,由于我们是要调试zephyr,因此要用工具链中的gdb
启动gdb
访问http://127.0.0.1:5000/dashboard
- 输入gdb所在的路径
- 点击start new session
将会启动一个新的gdb session,弹出一个新的session页面
在dashboard里面可以看到该session列表
加载调试文件
按照下图方式加载要调试的zephyr.elf
- 输入zephyr.elf的绝对路径
- 点击load binary
load成功后会显示main函数,并自动在main的第一条指令设置断点
远程连接gdbserver
这里通过浏览器控制gdb去连接gdbserver,步骤如下图
- 点击左上角的下拉列表,选择connect to gdb server
- 输入连接的gdbserver地址,前面知道gdbserver监听的是3333,因此这里输入127.0.0.1:3333
- 点击connect to gdb server
连接成功后,gdb将控制调试目标halt住,如下图:已经可以看到halt住时的backtrace了
调试
点击左上角的”Fetch source files” 将加载调试elf使用的所有source文件,然后选择要打断点的文件,打开后在行号前单击,变蓝后说明打好断点,之后进行调试即可
除了断点外,作为gdb的gui前端工具,gdbgui也提供了单步,查看变量,dump内存等功能。此外一些更复杂的功能也可通过左下方的gdb console进行cli操作。
其它
有些使用我们的gdb可能会开到其它机器上,可以使用下面命令启动gdbgui,让其它机器可以远程访问gdbgui的http server:
gdbgui -r
默认情况下开启的http server的端口号是5000,可以使用下面命令指定其它端口号
gdbgui -p 5001
小结
在不使用ide或者配置编辑器的情况下gdbgui提供了一种简单的gui调试方式。目前使用起来还有httpserver突然断链接的情况,但总体来说还算不错。