0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

助力程序员告别困扰已久的梦魇-Bug

朱老师物联网大讲堂 2024-07-02 08:10 次阅读

程序员的噩梦是什么?不用怀疑,就是让你加班到崩溃的Bug!下面是经过业界大佬们“长期加班”积累的小妙招,助力你离早下班又进一步~

一、定位Bug范围及性质

8a53011e-3807-11ef-a655-92fbcf53809c.png

要有效解决问题,首先要缩小范围,集中关注最近的代码变化。这有助于迅速定位可能引入问题的部分,避免无谓的时间浪费。检查最近的代码提交记录和修改日志,找出可能影响现有功能的变更。然后,与相关人员一起讨论和分析问题。这不仅包括开发团队,还应涉及测试人员和相关领域的专家,集思广益,全面理解问题的可能原因和影响。使用断点法,在怀疑出问题的代码段设置断点,逐步执行,观察程序行为;同时,利用串口打印法,在关键位置添加串口打印语句,实时输出变量值和程序状态,帮助跟踪问题所在,当然具体的功能块需要对症下药采用具体的合适的方式去调试。通过这种方法的迭代,不断缩小问题范围,并在每次迭代中应用上述方法进行分析和验证。经过多次迭代,问题将逐步清晰,最终得以解决。这种系统化的方式不仅提高了问题定位和解决的效率,还确保了修改不会引入新的问题。

二、解决Bug与验证

8a53011e-3807-11ef-a655-92fbcf53809c.png

解决BUG与验证时,首先要进行修改,确保不会引入新的问题。然后,进行全面测试,确认问题已彻底解决。这种方法不仅保证了修复的有效性,还避免了潜在的新增问题,通过系统化的验证步骤,提高了问题解决的效率和可靠性。

三、建议

8a53011e-3807-11ef-a655-92fbcf53809c.png

为确保系统稳定性和可靠性,需及时处理错误和异常,避免积累问题影响整体运行。使用前务必检查代码和系统的有效性,确保其在预期环境下正常运行。结构和过程设计应与使用场景紧密结合,避免因不匹配导致的潜在问题。在关键节点进行输入输出单元测试,确保每个部分的准确性和可靠性。此外,还要关注事件时序,包括事件顺序、连续事件、无事件及条件触发事件等情况,确保系统能够在各种情况下正常响应。通过这些措施,可以提高系统的健壮性和可靠性,减少意外情况的发生,确保系统在各种环境下稳定运行。

四、问题复现

8a53011e-3807-11ef-a655-92fbcf53809c.png

嵌入式系统中,问题复现是定位、解决和验证BUG的重要环节。复现问题的难度越低,解决问题就越容易。为了提高问题复现的稳定性,可以采取以下方法:

首先,可以在程序中预设特定条件,使系统进入已知问题状态,特别是对于涉及复杂外部输入的情况。这种方法可以模拟复现条件,让问题更加明显和可控。

其次,通过加快任务运行速度,缩短问题发生的时间,从而增加复现的机会。提高任务执行频率,使得潜在问题在较短时间内暴露出来,有助于快速识别和解决问题。

此外,通过在多个设备上同时进行测试,增加样本量,从而提高问题复现的概率。增大测试样本量,可以在不同环境和条件下进行测试,使得隐藏的问题更容易被发现和复现。

通过这些方法,可以更高效地复现问题,进而更快地找到解决方案并验证其有效性。这些策略不仅能帮助开发人员准确定位问题,还能在修复后进行有效的验证,确保问题彻底解决。

五、问题定位

8a53011e-3807-11ef-a655-92fbcf53809c.png

嵌入式系统的调试过程中,定位和解决BUG是非常重要的。为了有效地找到并修复问题,可以采用多种方法,这些方法不仅能帮助开发人员追踪问题,还能在问题修复后进行验证。

缩小范围是一个基本但非常有效的策略。通过将问题可能涉及的代码范围逐步缩小,可以更快速地定位具体问题。这种方法可以结合前述的日志分析、在线调试、版本回退和二分注释等方法,综合使用效果更佳。

在怀疑的代码处增加日志输出是一种有效的方法。通过增加日志,可以详细追踪执行流程和关键变量的变化,这有助于发现问题的具体位置和原因。日志输出能够提供实时的程序运行状态,对于复杂系统尤为重要。

在线调试工具对于程序崩溃类问题非常有用。通过调试工具,可以查看程序崩溃时的调用栈和寄存器值,从而了解程序在崩溃时的具体状态。这有助于迅速找出导致崩溃的代码段。

版本回退也是定位问题的重要方法之一。利用版本管理工具,可以回退到之前的版本,逐步检查在哪个版本引入了问题。通过定位首次引入问题的代码,可以快速找到问题的根源。

二分注释法可以有效缩小问题范围。通过逐步注释代码,逐段排除,找出具体引发问题的代码段。这种方法尤其适用于大段代码中隐藏的BUG,能够快速定位问题。

在异常中断时,保存内核寄存器快照也非常有帮助。通过在异常中断时保存寄存器值,复位后进行分析,可以了解异常发生时的系统状态,进而找出问题所在。

综上,通过日志分析、在线调试、版本回退、二分注释、保存内核寄存器快照以及逐步缩小问题范围,可以高效地定位和解决嵌入式系统中的各种问题。这些方法不仅能帮助开发人员快速找到问题所在,还能在修复后进行有效验证,确保问题彻底解决。

六、问题分析与处理

8b04ba30-3807-11ef-a655-92fbcf53809c.png

在嵌入式系统调试中,问题分析与处理是确保系统正常运行的关键。无论是程序运行异常还是崩溃,都需要从软件和硬件两方面进行细致排查。

当程序仍能运行但出现数值异常时,可能是软件或硬件问题。软件问题包括数组越界、栈溢出、判断语句条件错误、同步问题和优化问题。数组越界可以通过检查map文件确保写入操作的安全性。栈溢出需分析最大使用情况,调整函数调用层次或内存分配。避免判断语句中将赋值运算符“=”误写为相等运算符“==”,使用互斥锁等同步机制避免队列操作时的中断问题,使用volatile关键字避免编译器优化导致的问题。硬件问题可能是芯片BUG,需要通过软件过滤异常值;或者通信时序错误,需仔细分析芯片手册并严格遵守通信时序要求。

动作异常时,同样需要从软件和硬件两方面分析。软件问题可能包括设计问题、实现与设计不符和状态变量异常。设计问题需要重新评审设计文档,增加单元测试和代码review确保实现与设计一致,检查状态机变量的正确性。硬件问题可能是目标IC失效或通信异常,需排查硬件或使用示波器或逻辑分析仪检查通信时序。

程序崩溃导致停止运行时,软件问题可能包括HardFault和NMI中断。HardFault可能由未使能外设、函数指针越界、指针对齐问题或中断标志未清除引起。NMI中断可能由于如SPI引脚复用NMI功能导致程序挂死。硬件问题可能是晶振未起振、供电电压不足或复位引脚拉低。

当程序复位时,需要检查软件和硬件问题。软件问题可能是看门狗复位,需注意看门狗配置的细节。硬件问题可能是供电电压不稳或电源带载能力不足。

通过系统化的方法进行问题分析与处理,可以有效解决嵌入式系统中遇到的各种问题,确保系统稳定运行。

七、回归测试

8a53011e-3807-11ef-a655-92fbcf53809c.png

问题解决后,必须进行回归测试,确保问题不再复现,且修改未引入新问题。回归测试通过重运行已执行的测试用例,验证系统稳定性和功能完整性,是确保软件质量的关键步骤。通过系统化的方法进行问题分析与处理,可以有效解决嵌入式系统中的各种问题,确保系统稳定运行。

八、经验总结

8a53011e-3807-11ef-a655-92fbcf53809c.png

在嵌入式系统调试中,总结问题原因及解决方法是关键的一环。通过反思和总结,可以更有效地防范类似问题的再次发生,并在相同平台产品上借鉴这些经验,实现举一反三。总结经验时,记录每个问题的具体原因、解决方法以及预防措施,并在相同平台的其他产品开发中借鉴这些经验教训,可以有效提升整体开发效率和产品质量。通过系统化的方法进行问题分析、解决和总结,可以从失败中吸取经验,不断改进和优化系统设计和开发流程。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4602

    浏览量

    67362
  • 程序员
    +关注

    关注

    4

    文章

    940

    浏览量

    29631
  • BUG
    BUG
    +关注

    关注

    0

    文章

    155

    浏览量

    15606
收藏 人收藏

    评论

    相关推荐

    程序员节视频创意盛宴,邀您共襄盛举!

    10月24日,程序员专属的节日里,我们盛大开启“程序员节视频创意大赛”特别活动!这不仅是一场视觉的盛宴,更是智慧与创意的璀璨碰撞。我们诚挚邀请每一位程序员及编程爱好者,拿起你的镜头,记录下那些平凡日子中的不凡瞬间,让编程的魅力与
    的头像 发表于 07-04 09:00 11次阅读
    <b class='flag-5'>程序员</b>节视频创意盛宴,邀您共襄盛举!

    薪资高、青春饭,是不是程序员=青楼?

    花期太短。技术迭代快,年龄大容易失业。 就这几年的互联网环境而言,不管是前端、Java、Android开发等等行业。已经感受到程序员不是太卷就是工作难找,薪资过低。以前高工现在拿着中低程序员薪资
    发表于 03-06 21:32

    1月18号“纯鸿蒙”千帆启航,程序员预备!

    。 如何正确看待鸿蒙? 我作为程序员来说,首先是看鸿蒙的发展、市场开发岗位、薪资以及前景。 这几年对鸿蒙的发展情况来分析,从2019年开始鸿蒙的出来今天,华为鸿蒙取得了很大的成就。从“不兼容
    发表于 01-16 22:13

    【飞腾派4G版免费试用】鸿蒙系统的各种报错,让程序员差点.............

    开源这一块,但是大部分的程序员还是停留在生计问题,有时间有精力投入到给开源添砖加瓦的还是比较少,这或许就是开源与程序员的矛盾。 8、好多指令都缺,用起来完全不习惯,有好多东西需要自己去移植适配,现在我也
    发表于 12-13 15:09

    程序员表白程序

    电子发烧友网站提供《程序员表白程序.rar》资料免费下载
    发表于 11-21 10:41 0次下载
    <b class='flag-5'>程序员</b>表白<b class='flag-5'>程序</b>

    告别网络困扰!让4G家用路由器解放你的上网体验

    告别网络困扰!让4G家用路由器解放你的上网体验
    的头像 发表于 11-09 11:58 314次阅读
    <b class='flag-5'>告别</b>网络<b class='flag-5'>困扰</b>!让4G家用路由器解放你的上网体验

    喜迎1024程序员节!祝各位开发者们“码”到“程”功!

    祝各位开发者们,节日快乐! 程序员(Programmer)是从事程序开发、维护的专业人员。 对于奋斗在一线的程序员们来说, 10月24日 是一个特殊的日子,这一天是属于程序员们自己的节
    的头像 发表于 10-24 20:00 502次阅读
    喜迎1024<b class='flag-5'>程序员</b>节!祝各位开发者们“码”到“程”功!

    今天程序员节长沙出招 全国首个!长沙为程序员打造“1024街”

    今天10月24日,今天程序员节;先给程序员点赞,我们还看到有一些平台举办了程序员节;而在长沙,更有为程序员打造“1024街”。 昨天第四届“长沙·中国1024
    的头像 发表于 10-24 14:29 444次阅读

    程序员节 | 今年程序员们都想要的礼物竟然是……

    原文标题:程序员节 | 今年程序员们都想要的礼物竟然是…… 文章出处:【微信公众号:微软科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 10-24 10:35 330次阅读
    <b class='flag-5'>程序员</b>节 | 今年<b class='flag-5'>程序员</b>们都想要的礼物竟然是……

    移植ARM DHCP服务器版本1程序员指南

    这本书由ARM DHCP服务器服务器软件提供, 假定ARM DHCP服务器移植源可以作为参考, 也假设您可以访问程序员的 C 和 ARM 组装语言指南。 本程序员指南是为有经验的内嵌系统程序员编写
    发表于 08-18 06:46

    霓虹灯程序员指南

    如果您对ARM技术完全陌生,请阅读Cortex-A系列程序员指南,了解有关ARM架构配置文件和一般编程指南的信息。 ·霓虹灯技术是ARM高级单指令多数据(SIMD)扩展的实现。 ·霓虹灯单元是执行
    发表于 08-17 06:32

    ARMv8-A霓虹灯程序员指南

    程序员,如固件、设备驱动程序或android内核开发人员•希望为基于Arm的目标设备优化库或应用程序程序员•非常热衷于Raspberry Pi爱好者本指南涵盖了如何开始使用Neon,
    发表于 08-08 07:25

    ARM系统跟踪Macrocell程序员模型架构规范1.1版

    ARM 系统跟踪大型电池程序员示范建筑规格V1.1 建筑规格
    发表于 08-02 10:11

    61.[程序员小飞]如何在3分钟内安装好数据库MySql和Navicat,简单又易懂

    程序员
    充八万
    发布于 :2023年07月20日 09:16:19