首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

使用 ESP32 的调试工具 coredump

  • 24-03-03 17:41
  • 4028
  • 5037
blog.csdn.net

懒,暂时不想写了,直接帖文档吧,原文路径: ESP32 的 Core Dump

【ESP32 的 Core Dump】

ESP-IDF 支持在遇到不可恢复的软件错误时产生 core dump。这项有用的技术允许发生错误后再分析软件的状态。程序一旦崩溃,系统将进入 panic 状态,打印一些信息并挂起或者重启系统(依赖于配置)。用户可以选择产生 core dump 文件,从而可以在随后在 PC 上分析失败的原因。Core dump 中包含失败的那一刻系统中所有任务的快照。快照包括导致系统崩溃的线程的调用栈(callstack)。 ESP-IDF 提供了一个特殊的脚本 espcoredump.py 用于帮助用户恢复和分析 core dump。该工具提供了两个用于分析 core dump 的命令:

info_corefile - 打印崩溃任务的寄存器、调用栈、系统有效任务列、内存区域以及存储在 core dump 中的内存中的内容(任务控制块 TCB 和栈)。
dbg_corefile - 创建 core dump ELF 文件,并使用这个文件运行 GDB 调试会话。用户可以人工检查内存、变量和任务状态。需要注意的是,由于不是所有的内容都存放在 cour dump 中,只有分配到栈上的变量值才有意义。
  • 1
  • 2

【配置】

存在许多与 core dump 相关的配置选项,用户可以在应用程序的配置菜单中进行选择(make menuconfig)。

Core dump 数据目的地 (Components -> ESP32-specific config -> Core dump destination):

禁止产生 core dump
将 core dump 保存到 flash
将 core dump 打印到 UART

core dump 模块的日志级别 (Components -> ESP32-specific config -> Core dump module logging level)。该值是一个从 0(无输出)到 5(最多输出)之间的一个数字。
将 core dump 打印到 UART 之前的延迟 (Components -> ESP32-specific config -> Core dump print to UART delay)。该值以 ms 为单位。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

【保存 core dump 到 flash】

当该值被选择时,core dump 会被保存到 flash 上面的某个特殊分区。当使用 ESP-IDF 提供的默认分区表文件时,它将在 flash 上面自动分配所需空间。但是如果用户希望使用自己的带有 core dump 功能的布局文件,则应当像下面这样定义独立的分区表

# Name,   Type, SubType, Offset,  Size
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,      data, nvs,     0x9000,  0x6000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000, 1M
coredump, data, coredump,,        64K
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

分区表名没有特殊的需求,它可以根据用户应用程序的需要进行选择,但是分区表类型应当选择为 ‘data’,子类型应当选择为 ‘coredump’。此外,选择分区表大小的时候需要注意,core dump 的数据结构会引进一些额外的开销,包括固定 20 字节加上每个任务 12 字节。这个开销不包括每个任务的 TCB 大小和栈空间。因此,分区表的大小应当至少为 20 + 最大任务数量 x (12 + TCB 大小 + 任务最大栈大小) 字节。

从 flash 上面分析 core dump 的常用命令是: espcoredump.py -p info_corefile 或者 espcoredump.py -p dbg_corefile

【打印 core dump 到 UART】

当该选项被选择时,系统 panic 时会将按照 base64 编码的 core dump 打印到 UART 上。在这种情况下,用户需要手工将这些 core dump 文本的 body 保存到某个文件中,然后运行如下的目录: espcoredump.py info_corefile -t b64 -c 或者 espcoredump.py dbg_corefile -t b64 -c

按照 base64 编码的 core dump 的 body 位于下面的头部和尾部之间

================= CORE DUMP START =================

【运行 ‘espcoredump.py’】

命令的常用语法:

espcoredump.py [options] command [args]
Script Options:

–chip,-c {auto,esp32}. 目标芯片类型。支持的值包括 auto 和 esp32。
–port,-p PORT. 串口设备。
–baud,-b BAUD. 当 flashing/reading 时的串口波特率。
  • 1
  • 2
  • 3

Commands:

info_corefile. 恢复 core dump 并打印有用的信息。
dbg_corefile. 恢复 core dump 并使用它启动 GDB 会话。
  • 1
  • 2

Command Arguments:

–gdb,-g GDB. 用于恢复数据的 gdb 的路径。
–core,-c CORE. 待使用的 core dump 文件的路径(如果省略,则会从 flash 上面读取 core dmup)。
–core-format,-t CORE_FORMAT. 指定通过 “-c” 参数传递的文件是 ELF (“elf”) 格式,还是 dump 原始二进制格式 (“raw”),还是按照 base64 编码的(“b64”) 格式。
–off,-o OFF. coredump 分区在 flash 中的偏移(输入 “make partition_table” 可以直接查看)。
–save-core,-s SAVE_CORE. 将 core 保存到文件中,否则临时的 core 文件将会被删除。Ignored with “-c”.
–print-mem,-m 打印内存 dump。值在 “info_corefile” 时有用。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
注:本文转载自blog.csdn.net的chunhua.jiang的文章"http://blog.csdn.net/tidyjiang/article/details/72123346"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top