04 ESP32-Code Debugging-Summary Of Several Debugging Methods

* 工欲善其事,必先利其器.

一. JTAG 二. 日志系统 三. Core Dump

一、JTAG调试

这里先介绍第一种调试方法-JTAG调试,JTAG是从STM32转过来的开发者的第一反应,这里放在最前面介绍.但是对于双核多任务的ESP32应用程序,并非最优的调试方法.

1. 官方文档

关于调试环境的搭建,参考乐鑫官方文档即可,有中文版详细配置过程:

2. 硬件准备

2.1 ESP32 WROVER KIT

ESP-WROVER-KIT板载了JTAG功能(FT2232),但是需要连接4个跳线帽接通线路,如下图:

使能ESP32 JTAG

FT2232 是多协议 USB 转串口桥接器.在这里替换了cp2102,并且可以同时提供 USB-to-JTAG ,USB-to-Serial 接口功能,便利开发人员的应用开发与调试.具体配置信息可以查阅 ESP-WROVER-KIT V4.1 入门指南

2.2. ESP32 Core Board V2

ESP32 Core Board V2 没有JTAG插口,如果需要硬件调试,需要准备:

按照如下方式连接:

ESP32 使用标准的 JTAG 接口,支持STM32常用的J-Link,如何使用 J-Link 调试 ESP32,但是不支持ST-Link,也不支持SWD接口:

官方描述: 在软件方面,OpenOCD 支持相当多数量的 JTAG 适配器,可以参阅 OpenOCD 支持的适配器列表 (尽管上面显示的器件不太完整),这个页面还列出了兼容 SWD 接口的适配器,但是请注意,ESP32 目前并不支持 SWD.此外那些被硬编码为只支持特定产品线的 JTAG 适配器也不能在 ESP32 上工作,比如用于 STM32 产品家族的 ST-LINK 适配器.

3. JTAG调试笔记

JTAGt调试

3.1. 开启openOCD

3.2. 运行xtensa-esp32-elf-gdb

3.3. 输入gdb命令,进行调试

  • 断点设置:

  • 调试运行

  • 查看、修改内存

  • 查看代码

    ```

    i threads:查看当前所有线程

    thread N:查看编号N线程的代码

    bt(或backtrace):查看上一层,查看当前函数调用处(仅查看,未跳出)

    l:打印停止点处代码

    l 30, 40:打印第30-40行代码

help xxx:查看指令xxx的帮助

(gdb) x /1wx 0x3FF44004 0x3ff44004: 0x00000000 #返回0x00000000

(gdb) set {unsigned int}0x3FF44004=0x00000004

cd ~/esp/openocd-esp32 bin/openocd -s share/openocd/scripts -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg

```

1545202874386
  • OpenOCD:

    • 创建一个Server接收 gdb debugger 的连接请求

    • 通过JTAG适配器与ESP32 交互,控制设备运行状态

  • xtensa-esp32-elf-gdb debugger:

    • 作为一个client,连接OpenOCD

    • 与用户交互,接收用户的 debug 命令(s\n等指令),发送到OpenOCD

  • eclipse

    -图形化方式调用xtensa-esp32-elf-gdb debugger,包装命令行

最后更新于

这有帮助吗?