Debug
集成了openocd调试。可以断点调试 查看线程、变量,集成gdb控制台,内存视图,和外设寄存器查看。
默认的openocd未设置参数,如esp32c3/esp32s3/esp32c6/esp32c5/esp32h2/esp32p4 等含 内置jtag对于这些 idf.py openocd会自动选择内置jtag进行调试, 而如esp32 和esp32s2等 官方idf文档里面也是使用了核心板上外置的jtag进行调试,如果采用外置jtag调试器连接方式,需要openocd 参数项。
详情见配置其他jtag
默认的运行配置
使用当前插件新建项目时,会基于选择的target创建一份运行配置。如果使用esp32c3/esp32s3/esp32c6/esp32c5/esp32h2/esp32p4等无需其他配置, 连接esp32的jtag到pc即可一键debug。
手动新建配置
新建运行配置选择ESP-IDF,会默认基于build目录下的project_description.json
填充一些默认参数。
elf文件可以加载调试需要符号。rom一般是固定的,部分芯片rom存在不同版本,默认配置可能不是硬件对应的版本,需要手动选择。
gdb一般会自动选择,可根据需要重新选择。
Auto功能
Auto按钮可以自动填充调试配置项,但仅仅只对第一个CMake Profile生成。需要调试其他选项,可以手动选择对应的elf和gdb文件。
调试方法

在调试之前需要将程序编译完成并写入esp32的flash,可以使用任务树上的flash按钮或者点击 debug配置的运行图标。
点击debug图标开始调试,会启动openocd和gdb

会有一个默认断点,并非当前插件设置,建议在app_main手动打断点.然后跳过去。

查看线程
可以下拉线程框切换线程,每个线程栈帧可以点击跳转对应文件行。

变量
可以查看变量,进行一些表达式计算,设置变量值,复制地址到内存视图查看,等操作。

gdb控制台
可执行gdb命令,比如在这里写入寄存器。
比如输入以下命令,将io2设置为输出模式并写入高低,用来控制led灯。超过32的寄存器需要另外一组,具体可以查看技术参考手册。

内存视图
需要复制一个地址查看内存数据分布

外设
可以查看芯片外设的寄存器地址和值
加载对应芯片的svd文件

点此跳转乐鑫svd项目进行下载。
加载之后如图,如果选错,需要根节点 hide,然后重选。该文件地址本身会被记忆,如果切换芯片,需要手动重选。

需要搜索可以使用以csv编辑器打开的功能。也可编辑寄存器。
注意事项
linux可能启动openocd失败 会有如下报错
libusb_open() failed with LIBUSB_ERROR_ACCESS
对应设备无权限 ,在tools 目录找到openocd目录下的60-openocd.rules
一般在用户目录.espressif
下
例如
将60-openocd.rules复制到/etc/udev/rules.d/并刷新规则
或者按openocd报错日志临时赋予权限,执行LIBUSB_DEBUG=1 idf.py openocd
找到报错的设备
使用chmod给 其他用户和用户组赋 读写权限 sudo chmod 766 /dev/bus/usb/具体数字/具体数字 。当然 777也是可以的。
gdb 停不掉问题
当gdb在执行命令时,使用clion自带销毁进程方式 可能无法关闭。
最常见于openocd 未成功连接设备退出后, gdb忙于连接openocd等待超时,由于设置了10秒超时时间, 这个中途clion尝试销毁进程可能不会正确得到响应,最后不再尝试。遇到openocd未能连接设备的情况,可略等待超时后停止调试。 或者手动kill gdb进程。