Dump处理

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


抓取Dump调试信息

在调试过程中如果发生程序异常,我们可以配置模组进入Dump模式并抓取调试信息。

如何配置Dump模式

一般来说,模组在程序异常时默认的行为是reset,我们需要通过调整NV参数来配置模组异常时进入Dump模式,此更改需要从AT口(一般支持主串口和Quectel USB AT Port)下发AT指令来配置,指令如下:

AT+ECPCFG="faultAction",0

如何使用Dump工具并抓取Dump信息

正常连接日志工具EPAT,出现Dump时日志工具会自动进行抓取。注意工具需要匹配mdb信息(一般不随版本输出,有调试需求时移远提供)。

../../_images/image_D5j7bLkKkoksmaxA7ckc86QnnBe.webp ../../_images/image_Ccqrb7Zv8om1WuxVEQ5cyMTWnbe.webp

出现Dump时,日志工具会自动进行抓取,出现以下界面时,代表已经抓到了Dump。

../../_images/image_DpaKbmnt3ovp1OxCLFNcxrpfnBZ.webp

以上的对话框我们可以直接关闭,Dump信息此时已经保存在EPAT工具根目录的RamDump文件夹下,只有一个文件,其命名规则为RamDumpData + 时间戳,根据时间戳选择Dump文件,提供给移远分析。

../../_images/image_GTg9bB9YOo3z4txALJgcVKdYnOc.webp

Dump时LOG分析

模组在进入Dump模式时,会从LOG中输出一些信息,例如:Dump时的寄存器地址、异常类型、异常产生时正在执行的线程等,如果是assert触发的异常,还会输出对应的调试信息。

对LOG信息的分析一般可从以下几个点入手:

程序寄存器(PC)地址: 该地址对应了异常现场程序寄存器的内容,它负责存储当前正在执行的指令地址。通过该寄存器内的地址,可在固件的map文件内匹配到触发异常时正在执行的函数,从而帮助定位代码中产生异常的位置。

ASSERT调试信息: 一般来说,assert针对的是预想中不应存在的情况。一般在执行某些逻辑前会使用assert进行检查,查看当前运行情况是否在预期内。assert的打印信息一般都会直接输出直接导致异常的原因和位置,有助于判断异常的类型和产生位置。

常见的assert打印和对应信息

WDT timer expired: 说明模组内置看门狗超时。 Memory allocated failed: 大部分型号的log中都适配了类似的打印,说明申请内存失败,一般是heap不足或过于碎片化导致。 stack overflow: 大部分型号的log中都适配类似打印,说明发生了栈溢出。

Dump信息分析

Dump信息本质上是异常现场模组信息的拷贝,一般包括CPU的寄存器信息、内存信息等。这些信息通过与对应固件版本的调试信息匹配,可以解析出异常出现时的运行状态,包括异常时线程运行状态、栈调用关系、内存用量、信号量等等,这些信息可以分析出Dump的原因。

Dump的分析一般由移远完成,出现log无法分析原因的Dump时,用户可以抓取Dump并提供以下信息,由移远对Dump进行分析:

场景: 需要结合场景和栈调用关系,分析Dump时的运行逻辑。

步骤: 提供复现步骤,以便进行复现和验证。

发生概率: 评估影响范围以及复现条件。

软件版本: 确认发生异常的软件版本,提取对应版本的ELF调试文件。

Dump文件: 抓取到的Dump文件,与对应elf可解析出异常现场。

LOG文件: 条件允许的情况下,尽量抓取LOG(ECX00N/M/A USB和DEBUG uart会同时输出LOG,尽量都抓取),方便技术人员分析。