You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32用JTAG ESP-PROG调试ESP Async WebServer时反复触发SIGTRAP

问题:ESP Async WebServer调试时反复触发伪断点

我用VS Code搭配PlatformIO,基于ESP Async WebServer开发伪REST服务器,串口上传测试能正常运行,但使用JTAG ESP-PROG调试时,会反复进入伪断点,报错信息如下:

Thread 8 "async_tcp" received signal SIGTRAP, Trace/breakpoint trap.
Info : [esp32.cpu0] Target halted, PC=0x40092612, debug_reason=00000001
AsyncWebServer::_rewriteRequest (this=, request=0x3ffd18ac) at .pio/libdeps/az-delivery-devkit-v4/ESP Async WebServer/src/WebServer.cpp:107
107 if (r->match(request)){

我的platformio.ini配置

[env:az-delivery-devkit-v4]
platform = espressif32
board = az-delivery-devkit-v4 
framework = arduino
;monitor_speed = 115200
debug_tool = esp-prog
upload_protocol = esp-prog
debug_init_break = tbreak setup
debug_speed = 20000
;build_type = debug
;debug_build_flags = -O0 -g -ggdb

lib_deps = 
    ESP Async WebServer 
    bblanchon/ArduinoJson@^7.0.4
    esphome/ESPAsyncWebServer-esphome@^3.1.0
    esphome/AsyncTCP-esphome@^2.1.3

核心代码(SerialDebug为空函数)

void setup() {
    //Serial.begin(115200);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        SerialDebug("Connecting to WiFi ...");
    }
    SerialDebug("Local IP : %s",  WiFi.localIP().toString());

    // 路由配置
    server.on("/login", // 路由
              HTTP_POST, // HTTP方法(GET、POST、PUT、DELETE等)
              NULL, // GET请求对应的处理函数或lambda表达式
              NULL, // 文件上传处理函数
              OnLogin); // POST/PUT请求的请求体处理函数

    server.on("/get_nb_core", // 路由
              HTTP_POST, // HTTP方法(GET、POST、PUT、DELETE等)
              NULL, // GET请求对应的处理函数或lambda表达式
              NULL, // 文件上传处理函数
              OnGetNbCore); // POST/PUT请求的请求体处理函数

    server.begin();
}

void loop() {
    
}

解决方案

1. 启用Debug编译模式

当前配置注释掉了Debug编译相关选项,导致编译器用Release模式编译,代码被优化后会出现调试错位、伪断点问题。取消注释以下两行:

build_type = debug
debug_build_flags = -O0 -g -ggdb
  • -O0:关闭编译器优化,保证调试时机器码与源码一一对应
  • -g -ggdb:生成完整调试信息,让JTAG能正确映射源码位置

2. 同步依赖库编译配置

第三方库默认可能用Release模式编译,和主程序Debug模式不兼容。在platformio.ini中添加配置,强制依赖库同步Debug编译:

build_flags = 
    -DCORE_DEBUG_LEVEL=3
lib_ldf_mode = deep+
  • CORE_DEBUG_LEVEL=3:启用ESP32核心调试输出,辅助排查问题
  • lib_ldf_mode = deep+:确保依赖库的编译规则与主程序保持一致

3. 调整JTAG调试速度

当前debug_speed = 20000(20kHz),如果调试不稳定,可尝试降低速度到10000,或根据ESP-PROG官方手册调整到适配的速率。

4. 临时忽略特定伪断点

如果以上方法无效,可在VS Code调试面板的「断点」列表中,右键点击WebServer.cpp:107位置的断点选择「禁用」,临时跳过该伪断点。


内容的提问来源于stack exchange,提问作者JPBlanc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:02:39