电子产业一站式赋能平台

PCB联盟网

搜索
查看: 23|回复: 0
收起左侧

当嵌入式软件出现bug的时候,可以按照这种思路进行排查!

[复制链接]

502

主题

502

帖子

2191

积分

三级会员

Rank: 3Rank: 3

积分
2191
发表于 2025-1-6 17:50:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师
( Q: t6 ?0 S3 H  d2 U( C7 r" _/ e, I# m  u关注我,一起变得更加优秀!一、问题复现稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说,越容易复现的问题越容易解决。2 w0 U& T  z  p6 ~
1.1 模拟复现条件有的问题存在于特定的条件下,只需要模拟出现问题的条件即可复现。对于依赖外部输入的条件,如果条件比较复杂难以模拟可以考虑程序里预设直接进入对应状态。" P4 r; a7 a& n/ B  Q) t
1.2 提高相关任务执行频率例如某个任务长时间运行才出现异常则可以提高该任务的执行频率。' ?5 o  ]$ H- m) o0 O$ x  i) v
1.3 增大测试样本量程序长时间运行后出现异常,问题难以复现,可以搭建测试环境多套设备同时进行测试。+ H: ]- z( X2 j' @; U
二、问题定位缩小排查范围,确认引入问题的任务、函数、语句。. k! O$ j4 `/ m+ s- K( K
2.1 打印LOG根据问题的现象,在抱有疑问的代码处增加LOG输出,以此来追踪程序执行流程以及关键变量的值,观察是否与预期相符。
( R6 a5 u9 O) i, ^# ~8 b2.2 在线调试在线调试可以起到和打印LOG类似的作用,另外此方法特别适合排查程序崩溃类的BUG,当程序陷入异常中断(HardFault,看门狗中断等)的时候可以直接STOP查看call stack以及内核寄存器的值,快速定位问题点。
* m7 G6 _+ I' H6 x& o8 T2.3 版本回退使用版本管理工具时可以通过不断回退版本并测试验证来定位首次引入该问题的版本,之后可以围绕该版本增改的代码进行排查。
) V$ n. z6 I& O5 J# ~6 w2 w: u9 M2.4 二分注释二分注释即以类似二分查找法的方式注释掉部分代码,以此判断问题是否由注释掉的这部分代码引起。& C: J) `- U; d* f" N8 [
具体方法为将与问题不相干的部分代码注释掉一半,看问题是否解决,未解决则注释另一半,如果解决则继续将注释范围缩小一半,以此类推逐渐缩小问题的范围。
+ V) q# F# [$ d2 {' I/ o7 j. ~" R2.5 保存内核寄存器快照Cortex M内核陷入异常中断时会将几个内核寄存器的值压入栈中,如下图:
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表