外观
backtrace示例
2025-12-17
概述
本示例演示了如何在 RuiChing Studio IDE 中启用和使用 Backtrace(堆栈回溯)功能。当应用程序发生异常或崩溃时,Backtrace 模块能够自动捕获并记录完整的函数调用链信息,帮助开发者快速定位问题根源。
启用 Backtrace 模块后,当程序发生异常、崩溃或触发特定断点时,系统将自动捕获并输出完整的函数调用链信息。该信息记录了从异常发生点回溯至程序入口的完整执行路径,可在调试器(如 GDB、LLDB)中直接分析,用于精准定位错误源头,还原程序崩溃前的执行上下文。
支持特性
- 自动异常拦截:在 SIGSEGV(段错误)、SIGABRT(异常终止)等致命信号发生时自动触发;
- 主动调用接口:提供 API 供程序在任意位置主动生成调用栈快照;
- 条件触发机制:支持基于断言失败、内存越界检测等条件触发回溯;
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

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

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

创建完成。

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

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

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

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

固化 APP

核心代码
故意进行非法地址访问,触发异常。
applications/backtrace.c
static void bt_trigger_null_access(void)//层级调用
{
//访问非法地址,触发异常
volatile rt_uint32_t value = *(volatile rt_uint32_t *)0xFF000001;
rt_kprintf("value: 0x%08x\n", value);
}
static void bt_invoke_fault_chain(void)//层级调用
{
bt_trigger_null_access();
}运行示例
操作步骤
- 将程序下载到开发板
- 打开串口终端连接开发板
- 输入
backtrace_example命令
预期结果
当程序执行至非法地址访问时,系统将触发硬件异常,自动捕获并输出函数调用链回溯信息到串口终端。
rtt 终端
msh />backtrace_example
thread name: tshell
exception info:
esr.EC :0x25
esr.IL :0x01
esr.ISS:0x00000021
epc :0x0x00000004003814
Data abort
fault addr = 0x00000000fc000001
abort caused by read instruction
Alignment fault
Execption:
X00:0x0x00000000040076a0 X01:0x0x00000000fc000001 X02:0x0x000000000511a93c X03:0x0x0000000000000014
X04:0x0x0000000005100f0c X05:0x0x0000000005248edc X06:0x0x000000000000000a X07:0x0x203a656d616e2064
X08:0x0x000000000000000a X09:0x0x0000000000000000 X10:0x0x000000000000000a X11:0x0x0000000000000000
X12:0x0x0000000000000006 X13:0x0xffff000000000000 X14:0x0x0000000000000000 X15:0x0x0000000000000030
X16:0x0x0000000000000001 X17:0x0x0000000000000058 X18:0x0x0000000000000000 X19:0x0x0000000004016000
X20:0x0x000000000511fb14 X21:0x0x0000000000000000 X22:0x0x0000000000000016 X23:0x0x0000000000000017
X24:0x0x0000000000000018 X25:0x0x0000000000000019 X26:0x0x000000000000001a X27:0x0x000000000000001b
X28:0x0x000000000000001c X29:0x0x0000000005b40fe0 X30:0x0x0000000004003804
SP_EL0:0x0x0000000000000000
SPSR :0x0x0000000060000005
EPC :0x0x0000000004003814
[E/libcpu.trap] current thread: tshell
thread cpu bind pri status sp stack size max used left tick error tcb addr
-------------------------------- --- ---- --- ------- ---------- ---------- ------ ---------- ------- ------------------
tshell 0 0 20 running 0x00000498 0x00004000 19% 0x00000006 OK 0x5b3cfa8
mmcsd_detect N/A 0 22 suspend 0x00000390 0x00001000 22% 0x00000014 EINTRPT 0x5240f90
sys workq N/A 0 23 suspend 0x00000460 0x00005000 08% 0x0000000a OK 0x5b34fe0
tcpip N/A 0 10 suspend 0x000003e8 0x00002800 11% 0x00000014 EINTRPT 0x5b31a98
erx N/A 0 12 suspend 0x00000388 0x00004f10 04% 0x00000010 EINTRPT 0x52117b8
tsystem N/A 0 30 suspend 0x00000360 0x00002000 10% 0x00000020 EINTRPT 0x5244a00
tidle0 N/A 0 31 ready 0x000005f0 0x00002000 20% 0x00000006 OK 0x5246ba0
please use: addr2line -e rtthread.elf -a -f
0x4003814 0x51086e0 0x510877c 0x510cbfc 0x505c350
rt_hw_cpu_shutdown is not implemented