现场问题常常无法立即复现。CoreDump 的价值,是在系统仍有能力保存信息时,把关键证据留下来。

先定义需要回答的问题

程序执行到了哪里?当前任务使用哪一段栈?其他任务在等待什么?故障地址对应哪个区域?这些问题决定了要保存的上下文、内存范围和元数据,而不是先决定把所有内存都写出来。

上下文与版本必须能对应

常见信息包括 PC、SP、通用寄存器、适用架构上的返回地址寄存器、异常状态、任务标识和相关栈内容。分析时还需要与运行镜像一致的 ELF 和符号。使用错误版本的符号,可能得到看似合理但实际错误的调用栈。

故障现场 + 任务上下文 + 内存片段
                  ↓
        匹配构建版本与 ELF 符号
                  ↓
        地址解析、栈回溯与交叉验证

采集过程本身也会失败

异常路径应尽量减少对堆分配、复杂锁和常规任务调度的依赖。访问栈和内存前应验证范围。向其他 CPU 请求现场信息时,要有超时和有效性标识,不能因为一个核没有应答而让整个采集过程永久等待。

持久化需要完整性判断

写入 Flash 或文件时,考虑容量上限、写入中断、磨损和完整性校验。明确区分完整转储与部分转储。测试不仅要验证成功生成文件,也要确认截断或损坏的文件不会被误认为有效现场。

能够明确标记缺失信息的部分现场,比一份悄悄混入无效数据的完整文件更可靠。