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信息(一般不随版本输出,有调试需求时移远提供)。
出现Dump时,日志工具会自动进行抓取,出现以下界面时,代表已经抓到了Dump。
以上的对话框我们可以直接关闭,Dump信息此时已经保存在EPAT工具根目录的RamDump文件夹下,只有一个文件,其命名规则为RamDumpData + 时间戳,根据时间戳选择Dump文件,提供给移远分析。
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,尽量都抓取),方便技术人员分析。