之前介绍了如何安装 OPENOCD ,这是在 ESP32 上进行 Debug 的必要程序。可以使用 GDB 进行单步调试等等。
但是 GDB 是命令行界面,对于新手和复杂的调试不太友好,所以我打算使用 Eclipse 来调用 OPENOCD 进行辅助调试。
一 、安装软件
首先要在 Ubuntu 系统上安装 JDK , 由于 oracle 官网上的 JDK 现在要求登录才能下载,所以为了避免麻烦,可以使用 openjdk 作为 JDK 的安装源。Ubuntu 系统下只需要输入下面一行命令就可以完成。
sudo apt-get install openjdk-8-jre
然后安装 Eclipse 软件,我在网上找到了如下教程,写的很好,我就不再赘述了,大家可以参考原博主的博客进行安装。
https://www.cnblogs.com/zyrblog/p/8548270.html
二、设置桌面快捷方式
安装好 Eclipse 之后 第一件事是给 Eclipse 设置桌面快捷方式 在桌面 使用文本编辑器新建 Eclipse.desktop 文件 内容如下:
[Desktop Entry]
Encoding=UTF-8
Name=eclipse
Comment=Eclipse IDE
Exec=/home/gengyuchao/eclipse/cpp-2019-06/eclipse/eclipse
Icon=/home/gengyuchao/eclipse/cpp-2019-06/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
其中Exec 和 Icon 的软件路径要换成你安装Eclipse的路径
右击该文件 选择 Permission 选项卡 允许作为可执行文件
双击运行Eclipse图标, 选择相信该可执行文件, 就可以启动了。
三、添加(复制) IDF 工程到 workspace
git clone --recursive https://github.com/espressif/esp-idf.git
四、导入IDF工程
将下载好的 IDF 工程放到 workspace 文件下(只是建议)
至此我们就可以再 Eclipse 中进行编辑 ESP32 的工程了。
在IDF 中添加自己的工程文件夹 myProject
复制一个例程blink
可以在例程目录(blink)下添加编译选项 方便编译和下载
右击工程文件夹 ->Build Target -> Build 会弹出如下配置界面
添加我们常用的功能到Build Target
添加好之后工程目录下会有如下选项 双击可以执行命令进行编译和下载
常用的编译有
Build (quick) | make -j4 |
flash | make -j4 flash |
clean | make clean |
五、引用官方教程安装GDB插件
在 Eclipse 中使用 GDB
标准的 Eclipse 安装流程默认安装调试功能,另外我们还可以使用插件来调试,比如 “GDB Hardware Debugging”。这个插件用起来非常方便,本指南会详细介绍该插件的使用方法。
首先,通过打开 Eclipse 并转到 “Help” > “Install New Software” 来安装 “GDB Hardware Debugging” 插件。
一路点击下一步确认直至安装完成,安装完成之后eclipse会要求重启。
六、官方的配置说明
官方的配置说明很详细,我就不再赘述,这里引用过来方便参考,后面补充了一些注意事项。
在 Eclipse 中,进入 Run > Debug Configuration,会出现一个新的窗口。在窗口的左侧窗格中,双击 “GDB Hardware Debugging” (或者选择 “GDB Hardware Debugging” 然后按下 “New” 按钮)来新建一个配置。
在右边显示的表单中,“Name:” 一栏中输入配置的名称,例如: “Blink checking”。
在下面的 “Main” 选项卡中, 点击 “Project:” 边上的 “Browse” 按钮,然后选择当前的 “blink” 项目。
在下一行的 “C/C++ Application:” 中,点击 “Browse” 按钮,选择 “blink.elf” 文件。如果 “blink.elf” 文件不存在,那么很有可能该项目还没有编译,请参考 使用 Eclipse IDE 编辑和烧写指南中的介绍。
最后,在 “Build (if required) before launching” 下面点击 “Disable auto build”。
上述步骤 1 - 5 的示例输入如下图所示。
GDB 硬件调试的配置 - Main 选项卡
点击 “Debugger” 选项卡,在 “GDB Command” 栏中输入
xtensa-esp32-elf-gdb
来调用调试器。更改 “Remote host” 的默认配置,在 “Port number” 下面输入
3333
。上述步骤 6 - 7 的示例输入如下图所示。
GDB 硬件调试的配置 - Debugger 选项卡
最后一个需要更改默认配置的选项卡是 “Startup” 选项卡。在 “Initialization Commands” 下,取消选中 “Reset and Delay (seconds)” 和 “Halt”,然后在下面一栏中输入以下命令:
mon reset halt flushregs set remote hardware-watchpoint-limit 2
注解
如果你想在启动新的调试会话之前自动更新闪存中的镜像,请在 “Initialization Commands” 文本框的开头添加以下命令行:
mon reset halt mon program_esp32 ${workspace_loc:blink/build/blink.bin} 0x10000 verify
有关
program_esp32
命令的说明请参考 上传待调试的应用程序章节。在 “Load Image and Symbols” 下,取消选中 “Load image” 选项。
在同一个选项卡中继续往下浏览,建立一个初始断点用来在调试器复位后暂停 CPU。插件会根据 “Set break point at:” 一栏中输入的函数名,在该函数的开头设置断点。选中这一选项,并在相应的字段中输入
app_main
。选中 “Resume” 选项,这会使得程序在每次调用步骤 8 中的
mon reset halt
之后恢复,然后在app_main
的断点处停止。上述步骤 8 - 11 的示例输入如下图所示。
GDB 硬件调试的配置 - Startup 选项卡
上面的启动序列看起来有些复杂,如果你对其中的初始化命令不太熟悉,请查阅 调试器的启动命令的含义章节获取更多说明。
如果你前面已经完成 配置 ESP32 目标板中介绍的步骤,那么目标正在运行并准备与调试器进行对话。按下 “Debug” 按钮就可以直接调试。否则请按下 “Apply” 按钮保存配置,返回 配置 ESP32 目标板章节进行配置,最后再回到这里开始调试。
一旦所有 1 - 12 的配置步骤都已经完成,Eclipse 就会打开 “Debug” 视图,如下图所示。
Eclipse 中的调试视图
按照以上内容配置完成后,记得要在系统中打开 openocd 这里介绍的插件并不会自动启动 openocd,直接使用 debug 功能会造成启动超时失败。
启动openocd
sudo openocd -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg
下面时我使用的配置页
七、OpenOCD基本操作
openocd无参数启动时默认使用当前目录下的openocd.cfg配置文件,建议把需要的配置写在这个文件里以方便使用。
openocd需要使用usb,建议把/usr/local/share/openocd/contrib/60-openocd.rules拷贝到/etc/udev/rules.d,这样openocd就有使用usb调试设备的权限了,不用每次sudo (配置完成后需要重启生效)
openocd.cfg里面重要的配置包括选择接口配置文件、选择接口类型、选择具体芯片
八、调试
配置完成后点击Debug或者在编辑器中点击后面的小三角 选中刚刚配置好的Debug模式 就可以开始进行断点调试了。
九、一些常用的调试方法
包括设置断点、单步调试、设置watch point等以后再补充。
欢迎大家关注我的博客和github,我会在这里分享我的一些技术文章,期待大家给我点赞和小星星哦~^_^