PlatformIO 内存级调试

PlatformIO 默认构建即包含了调试信息
可以手动添加编译参数,输出 .map:

1
2
3
4
build_flags =
-Wl,-Map,${BUILD_DIR}/firmware.Map
-Wl,--cref ; 生成交叉引用
-fno-inline ; 禁止内联优化

方案一:直接解析崩溃地址(无需工具链)

用文本编辑器打开 output.map,搜索崩溃地址 去掉前两位(ESP32-C3 的 Flash 地址是 0x42xxxxxx,实际偏移是后6位):

  • 例如 0x420012d2 → 搜索 0012d2,或者往前一位位找
  • 重点查看 .text 段附近的符号

方案二:在线反编译

https://godbolt.org (选择 XTensa 架构)

方案三:反编译工具链:

安装工具集(通常已安装过)

1
2
pio platform update
pio platform install espressif32

工具链位置:~/.platformio/packages/toolchain-xtensa-esp32s3/bin/xtensa-esp32s3-elf-

addr2line 精确定位
1
xtensa-esp32-elf-addr2line -pfiaC -e .pio/build/XXX/firmware.elf 0x[内存后四位]
nm 查看符号
1
xtensa-esp32-elf-nm -n .pio/build/XXX/firmware.elf | grep -C 10 0000[内存后四位]