调试是每个开发人员都想避免的任务,但不幸的是,它是软件开发中不可避免的罪恶。到了卷起袖子开始调试的时候,每个开发人员都应该记住7个技巧。

  技巧 1——采取可控的步骤

  当一个bug爬进嵌入式软件时,开发人员的第一反应是跳入代码并开始修改。它们通常是随意的,几乎是随机的,而不是以一种受控制和受指导的方式做出改变。嵌入式软件开发不是蛮荒的西部。即使是最简单的bug的解决也应该包括检查可用的数据,评估它,假设最可能的原因,更新然后测试。如果改变不能解决问题,新的数据应该出现,然后帮助过程重复。

  技巧2——增加断言密度

  ASSERT宏是一个很好的工具,开发人员可以用它来验证代码中的假设。令人惊讶的是,许多开发人员没有花时间将它们放入他们的代码中。代码库的断言密度通常是漫长而痛苦的调试会话之间的差异,或者是失败假设发生时的陷阱。ASSERT可以帮助开发人员立即发现错误或假设失败。

  技巧3——使用数据记录器

  关于软件如何运行的信息是嵌入式软件工程师调试时最有用的工具。拥有诸如任务何时开始和完成、它们是否被抢占等性能信息以及其他细节可能是至关重要的。使用日志是开发人员深入了解软件的一个很好的方式。日志可以像RAM缓冲区、写入外部闪存的文件一样简单,也可以像传输到远程位置的编码数据一样复杂。在任何情况下,日志文件都是收集调试和系统分析信息的好方法。

  

  技巧4——使用高级断点

  开发人员熟悉使用标准断点,只需双击一行代码的左边就可以打开标准断点。许多IDE具有更高级的断点功能,但很少被利用。高级断点的一个例子是设置一条线,当变量达到某个值时断开。使用高级断点可以大大减少调试时间,并使难以捕捉的错误更容易发现。

  技巧5——再次查看数据手册

  调试外设可能特别困难。现代微控制器可以有10个寄存器来设置一个外设。外设设置并不总是显而易见或有据可查的。更糟糕的是,正确设置的细节通常不在单个数据手册中。只看一个是不够的。当硬件运行不正常时,请反复查看数据表。

  技巧6——监控调用堆栈

  开发人员有时会质疑他们最初是如何找到特定的代码行的。IDE包含一个调用堆栈窗口,可以准确地显示这些信息。调用堆栈显示了调用了哪些函数以及调用的顺序,揭示了对跟踪bug非常有用的信息。

  结论

  不管你花很多时间调试还是很少时间,事实是作为嵌入式开发人员这是不可能避免的。使用本文中的技巧有助于使调试变得更容易接受。

嵌入式开发:调试嵌入式软件的技巧相关推荐

  1. 嵌入式开发调试学习与思考

    截至今天,自己负责的一个项目算是告一段落,前前后后5个多月时间. 该项目是对公司设计的基于powerpc的处理器进行FPGA仿真阶段的软件验证,以及bootloader和kernel移植,以便芯片进行 ...

  2. 嵌入式开发/调试辅助工具

    开发辅助工具开发环境组成通常开发环境由三部分组成: 构建环境:包括代码编写,程序编译,版本控制等功能. 调试环境:用于定位问题的辅助工具集 测试环境:用于验证目标程序是否满足用户要求的显性需求和隐性需 ...

  3. 嵌入式开发:嵌入式软件的未来—基于平台的开发

    在项目启动后不久,工程师们不得不再次编写微控制器驱动程序,试图集成实时操作系统 (RTOS) 和第三方组件,从而深入研究细节.这些重复的项目任务会消耗时间.精力并抑制产品创新.一个有趣的解决方案开始出 ...

  4. 什么是嵌入式开发?嵌入式软件开发入门教程

    嵌入式系统发展到今天,对应于各种微处理器的硬件平台一般都是通用的.固定的.成熟的,这就大大减少了由硬件系统引入错误的机会.此外,由于嵌入式 操作系统屏蔽了底层硬件的复杂性,使得开发者通过操作系统提供的 ...

  5. 嵌入式开发 延长FLASH使用寿命技巧

    在嵌入式单片机开发时,虽说现在的flash擦写次数少则10w次,也有寿命接近无限的铁电存储器,但对于常常把 成本挂嘴边的消费电子来说不实际,通常需要在软件上微操,一般两个办法:1.上文件系统:2.也就 ...

  6. 嵌入式开发之路(偏汽车电子嵌入式软件工程师学习路线图)

    文章目录 一.嵌入式开发 1.1前情提要 1.2 学习路线图 1.3 职业 二.嵌入式编程基础 2.1 编程语言 2.1.1 c语言 2.1.2 c++ 2.2 数据结构和算法 2.2.1 数据结构 ...

  7. 嵌入式开发:变得更加敏捷的5个技巧

    ​ 很多嵌入式软件团队都对变得更加敏捷感兴趣,采用敏捷实践可以显着提高团队的敏捷程度.企业和嵌入式开发人员都希望能够更快地交付.在这篇文章中,我们将探讨五个提高敏捷性的技巧. 技巧1 - 放弃代码审查 ...

  8. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远程 ...

  9. 嵌入式开发:使用ITM提高调试效率

    ​ 无论我们的调试工具变得多么复杂,老旧的printf语句总会有一席之地.printf往往是高效的,并且会极大地影响系统的实时性能.对于使用Arm Cortex®-M3或更高版本的嵌入式开发人员,可以 ...

  10. 嵌入式开发输出调试信息的几种方法(常规法及非常规法)

    这篇文章对于研发查找问题和测试都有很大帮助,在这里保存记录一下. 论语>有云:"工欲善其事,必先利其器".输出调试信息是软件开发中必不可少的调试利器,在出现bug时如果没有调 ...

最新文章

  1. SAE上安装第三方模块
  2. 2014-3-9 星期天[周末计划实施总结]
  3. 注解 @Scheduled
  4. LeetCode面试刷题技巧-二分查找算法代码思路解析
  5. HttpWebRequest与HttpWebResponse进行数据采集时的注意点
  6. 【计算机图形学】实验:C#语言采用GDI+定义笔刷并填充图形完整实验操作流程
  7. 各自然带代表植被_植被垂直带谱?水与热之间的较量。
  8. 消息中间件的技术选型心得-RabbitMQ ActiveMQ和ZeroMQ
  9. 一个资深系统管理员的O2O实践(三)
  10. 一个奇怪的问题:tomcat 栈溢出 StackOverflowError错误
  11. 【转载】如何在Ubuntu上安装LAMP服务器系统?
  12. 服务器提权常见方法介绍
  13. python绘制图像频谱_python傅里叶变换FFT绘制频谱图
  14. 2019年java经典面试题(附答案)
  15. 牛!发出中国第一封电子邮件,注册登记域名CN,中国互联网之父传奇
  16. 10分钟健身法读书笔记(2/5)
  17. 文化课很差能学计算机专业吗,文化成绩不好,想要学习计算机不知道能不能学呢?...
  18. 国内Linux笔记天花板,不接受反驳!
  19. 一篇文章理解Promise原理
  20. 3DMax如何制作弧形椅子?

热门文章

  1. 怎么取消计算机文件共享,Win10系统怎么取消文件共享
  2. 陈强教授《机器学习及R应用》课程 第七章作业
  3. 我们什么都没有,只有爱
  4. 这家山炮公司,居然让腾讯又有了梦想!?
  5. 【2020 ACM Fellow 华人学者】 Wei Wang 加州大学洛杉矶分校
  6. myeclipse使用(技术和快捷键)
  7. 网站建设及上线的详细步骤(原创)
  8. 彻底了解DVD:从入门到精通
  9. 计算机网络的定义和分类
  10. 团队管理,领导的“无为”就是最大“有为”