Debug
集成了openocd调试。可以断点调试 查看线程、变量,集成gdb控制台,内存视图,和外设寄存器查看。
默认的openocd未设置参数,如esp32c3 esp32c6 esp32s3 esp32h2 esp32p4 等含 内置jtag对于这些 idf.py openocd会自动选择内置jtag进行调试, 而如esp32 和esp32s2等 官方idf文档里面也是使用了核心板上外置的jtag进行调试,如果采用外置jtag调试器连接方式,需要openocd 参数项。
详情见配置其他jtag
默认的运行配置
使用当前插件新建项目时,会基于选择的target创建一份运行配置。如果使用esp32c3 esp32c6 esp32s3 (esp32h2暂未测试,esp32p4目前的usb口可能未正常连接jtag)等无需其他配置, 连接esp32的jtag到pc即可一键debug。
手动新建配置
新建运行配置选择ESP-IDF,会默认基于build目录下的project_description.json
填充一些默认参数。
elf文件可以加载调试需要符号。rom一般是固定的,部分芯片rom存在不同版本,默认配置可能不是硬件对应的版本,需要手动选择。
gdb一般会自动选择,可根据需要重新选择。
调试方法
在调试之前需要将程序编译完成并写入esp32的flash,可以使用任务树上的flash按钮或者点击 debug配置的运行图标。
点击debug图标开始调试,会启动openocd和gdb
会有一个默认断点,并非当前插件设置,建议在app_main手动打断点.然后跳过去。
查看线程
可以下拉线程框切换线程,每个线程栈帧可以点击跳转对应文件行。
变量
可以查看变量,进行一些表达式计算,设置变量值,复制地址到内存视图查看,等操作。
gdb控制台
可执行gdb命令,比如在这里写入寄存器。
比如输入以下命令,将io2设置为输出模式并写入高低,用来控制led灯。超过32的寄存器需要另外一组,具体可以查看技术参考手册。
内存视图
需要复制一个地址查看内存数据分布
外设
可以查看芯片外设的寄存器地址和值
加载对应芯片的svd文件
点此跳转乐鑫svd项目进行下载。
加载之后如图,如果选错,需要根节点 hide,然后重选。该文件地址本身会被记忆,如果切换芯片,需要手动重选。
需要搜索可以使用以csv编辑器打开的功能。写入寄存器可以复制地址到gdb控制台进行操作。
注意事项
linux可能启动openocd失败 会有如下报错
libusb_open() failed with LIBUSB_ERROR_ACCESS
在idf命令行 执行LIBUSB_DEBUG=1 idf.py openocd
找到报错的设备
使用chmod给 其他用户和用户组赋 读写权限 sudo chmod 766 /dev/bus/usb/具体数字/具体数字 。当然 777也是可以的。