当前位置: 首页 > ds >正文

ESP32 在Arduino开发环境中,如果程序运行报错如何定位程序报错是哪行代码

在开发中,我们常常会遇到编译正常,但是运行过程中程序报错,然后重启,在这种情况下,又没法知道是哪段程序引起的,现在我们就来解决这个问题。

其实ESP32的SDK中已经附带这些debug的工具了。

首先如果我们程序如果运行出错,那么在串口log中一定会看到dump出的内存地址信息。而我们使用这些信息通过工具就能定位回程序代码。

在Arduino中程序编译后会有一个缓存的文件夹,里面包含了编译的文件,它的路径类似以下这样

C:\Users\用户名\AppData\Local\arduino\sketches\7640961C8FD4426D6DA420FEF9E4113E

其中的“7640961C8FD4426D6DA420FEF9E4113E”是程序生成的,每个人的都不一样,你可以根据sketches目录下的文件日期来确定当前最新编译的是哪个文件夹,通过排序“修改日期”,例如这样来找到,点进去后里面的文件命名和你的工程命名一样就是正确的了

进去后我们找到一个文件,你的工程名.ino.elf  这样后缀的一个文件,好记录下这个文件的路径,以备用

下一步,我们要找到ESP32 SDK工具的路径,一般在这个路径下,如果安装的Arduino IDE的版本不一样的话,或者ESP32 SDK的版本不一样的话,这里的路径中的文件名可能不一样,但是都大同小异,我们最终要找的执行文件是  riscv32-esp-elf-addr2line.exe,只要确保到是这个exe文件的地址就好了

C:\Users\用户名\AppData\Local\Arduino15\packages\esp32\tools\esp-rv32\2405\bin

好准备完成,接下来就开始使用了

在控制台中运行命令

 C:\Users\用户名\AppData\Local\Arduino15\packages\esp32\tools\esp-rv32\2405\bin\riscv32-esp-elf-addr2line.exe -pfiaC -e C:\Users\用户名\AppData\Local\arduino\sketches\7640961C8FD4426D6DA420FEF9E4113E\你的工程名.ino.elf 0x00060033

按照你的路径和编译文件路径来,最后的0x00060033 是程序出错串口中log打印出来的地址

一般是traceback  或者  PC 后面的地址,都可以试试看

然后我们得到的就是具体报错的代码的位置了,例如这样(我这个就是tasks.c文件的3274行代码报错)

0x4008faf5: xTaskIncrementTick at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/FreeRTOS-Kernel/tasks.c:3274

http://www.xdnf.cn/news/13089.html

相关文章:

  • 香橙派3B学习笔记7:snap安装管理软件包_打包程序与依赖
  • day 48
  • 注意高温陷阱?---可恢复保险丝应用失效案例分享
  • 自动交换两个文件的文件名 VSB脚本技巧 电脑技巧
  • 操作系统期末版
  • 免杀对抗--PE文件结构
  • 汽车车载软件平台化项目规模颗粒度选择的一些探讨
  • 【学习笔记】TLS
  • 贝叶斯医学分析中“先验”的如何进行选择(文献解读)
  • Java【基础篇0】
  • java中装饰模式
  • Go内存池设计与实现:减少GC压力
  • ASM,LVM,扫描并扩容步骤-linux
  • 什么是双脉冲测试?
  • 【C++】第十一节—一文详解vector(使用+杨辉三角+深度剖析+模拟实现+细节详细补充)
  • 为什么要引入内联函数?
  • Python Selenium登录网易邮箱
  • FastAPI实战起步:从Python环境到你的第一个“Hello World”API接口
  • day 18进行聚类,进而推断出每个簇的实际含义
  • token和md5
  • Spring Boot 完全指南:快速构建企业级应用
  • vue中Echarts的使用
  • 【评测】Qwen3-Embedding模型初体验
  • frida Hook入门
  • [FreeRTOS]1.FreeRTOS基础知识
  • Java处理字符数组转换为开始日期和结束日期
  • 【学习笔记】深入理解Java虚拟机学习笔记——第3章 垃圾收集器与内存分配策略
  • LLMs之MCP:《Evaluation Report on MCP Servers》翻译与解读
  • 『uniapp』自定义隐私政策弹窗 调整颜色和多语言国际化支持超链接 演示本地插件的使用,和一般性的插件自定义(保姆级图文)
  • CppCon 2015 学习:Live Lock-Free or Deadlock