使用gdbgui调试Zephyr

Creative Commons
本作品采用知识共享署名

本文简要解释gdbgui以及如何用其调试zephyr.

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

  1. 输入gdb所在的路径
  2. 点击start new session
    将会启动一个新的gdb session,弹出一个新的session页面

    在dashboard里面可以看到该session列表

加载调试文件

按照下图方式加载要调试的zephyr.elf

  1. 输入zephyr.elf的绝对路径
  2. 点击load binary
    load成功后会显示main函数,并自动在main的第一条指令设置断点

远程连接gdbserver

这里通过浏览器控制gdb去连接gdbserver,步骤如下图

  1. 点击左上角的下拉列表,选择connect to gdb server
  2. 输入连接的gdbserver地址,前面知道gdbserver监听的是3333,因此这里输入127.0.0.1:3333
  3. 点击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突然断链接的情况,但总体来说还算不错。

参考

https://www.gdbgui.com/
https://github.com/cs01/gdbgui