外观
coredump
2025-10-29
概述
本示例演示了如何使用 RuiChing Studio IDE 创建一个简单的应用程序,该应用程序在发生异常时生成核心转储文件。
启用核心转储(Core Dump)模块后,当系统发生崩溃或异常中断时,CPU 寄存器、线程栈和内存内容将根据所启用的后端进行导出,可保存为标准 ELF Core 文件。该文件可在 GDB 调试器中加载,用于定位错误现场,恢复线程上下文及调用栈信息。
支持特性
- 内存导出:支持导出 .data、.bss 等内存段内容;
- 线程栈保存:保存触发异常的线程栈和其他线程栈;
- 寄存器保存:保存异常线程的寄存器上下文;
- 多线程支持:多线程 NOTE 段支持,可在 GDB 中 info threads;
- 标准兼容:ELF Core 文件可直接在 gdb-multiarch、arm-none-eabi-gdb 等工具中加载分析
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心代码
故意进行非法地址访问,触发 Data Abort 异常。
applications/trigger_dabt_exception.c
static void level3_data_abort(void) //层级调用
{
//访问非法地址,触发 data abort 异常
volatile rt_uint32_t ptr = *(volatile rt_uint32_t *)0xFF000001;
rt_kprintf("value 0x%08x\n", ptr);
}
static void level2_data_abort(void) //层级调用
{
rt_kprintf("Entering level2_data_abort\n");
level3_data_abort();
rt_kprintf("This line should not be reached\n");
}
static void level1_data_abort(void) //层级调用
{
rt_kprintf("Entering level1_data_abort\n");
level2_data_abort();
rt_kprintf("This line should not be reached\n");
}
static void data_abort_thread_entry(void *parameter)
{
rt_kprintf("Starting data abort test\n");
level1_data_abort();
rt_kprintf("This line should not be reached\n");
}运行示例
操作步骤
- 将程序下载到开发板
- 打开串口终端连接开发板
- 输入
trigger_data_abort_exception命令
预期结果
程序执行后会触发数据访问异常,系统将生成核心转储信息并显示在终端上。
rtt 终端
msh />trigger_data_abort_exception
Starting data abort test
Entering level1_data_abort
Entering level2_data_abort
==================== System Crash Detected =====================
Exception Type : Data Abort
Exception PC Address : 0x04009ee0
--------------------- CoreDump Information ---------------------
[coredump] saved to ram: 0x09C74160, size: 246206 bytes
[coredump] you can press the reset key then use 'cd_ram_dump 0x9c74160 246206' to dump to file
---------------------- CPU Register State ----------------------
General Registers:
r00: 0x0000c1fc r01: 0x0000000a r02: 0xff000000 r03: 0x05114f04
r04: 0x040d369c r05: 0x040bc20c r06: 0xdeadbeef r07: 0xdeadbeef
r08: 0xdeadbeef r09: 0xdeadbeef r10: 0x05118a24
Special Registers:
fp : 0x057d0294 (Frame Pointer)
ip : 0x00000003 (Intra-Procedure-call scratch)
sp : 0x057d0280 (Stack Pointer)
lr : 0x04009ecc (Link Register)
pc : 0x04009ee0 (Program Counter)
cpsr: 0x60000013 (Current Program Status Register)
------------------------- Backtrace ----------------------------
please use: addr2line -e app.elf -a -f 0x04009ed8
--------------------- Thread Information -----------------------
thread cpu bind pri status sp stack size max used left tick error tcb addr
-------------------------------- --- ---- --- ------- ---------- ---------- ------ ---------- ------- ----------
data_abort_test 0 0 20 running 0x000001ac 0x00000400 66% 0x00000008 OK 0x057cfdb0
tshell N/A 0 20 suspend 0x00000220 0x00010000 01% 0x00000009 OK 0x055be7e0
trace N/A 0 28 suspend 0x000001d0 0x00001000 11% 0x00000014 EINTRPT 0x055bd498
usbh_hub1 N/A 0 15 suspend 0x00000228 0x00002000 12% 0x00000003 EINTRPT 0x055b01f0
mmcsd_detect N/A 0 22 suspend 0x000001c0 0x00005000 04% 0x00000014 EINTRPT 0x0540ba18
sys workq N/A 0 23 suspend 0x000001e0 0x00002800 09% 0x00000004 OK 0x054d1258
tcpip N/A 0 10 suspend 0x000001c8 0x00002800 07% 0x00000014 EINTRPT 0x054c8330
erx N/A 0 12 suspend 0x000001c4 0x00002800 04% 0x00000010 EINTRPT 0x051d039c
tsystem N/A 0 30 suspend 0x000001a0 0x00002000 05% 0x00000020 EINTRPT 0x0544ab90
tidle2 2 2 31 running 0x00000148 0x00002000 05% 0x0000000e OK 0x0544ce18
tidle1 1 1 31 running 0x00000148 0x00002000 05% 0x0000001f OK 0x0544cd48
tidle0 N/A 0 31 ready 0x00000158 0x00002000 07% 0x00000009 OK 0x0544cc78
========================= End of Crash =========================
shutdown...