老齐教室

调试及其重要性

软件在发布之前,应该没有错误,这样才能让用户满意。为了达到这个目的,在开发过程中,调试(debugging)是必不可少的——注意,调试不是测试,两者是有区别的。

什么是调试?

软件程序在开发过程中要经历大量的测试、更新、故障排除和维护,程序中有错误和缺陷,是正常现象,关键在于如何改正这些错误和缺陷。调试就是对软件进行错误修正的过程。

即识别、分析和消除错误。调试过程开始于软件无法正确执行之际,结束于解决问题并成功测试软件之时。 调试过程是一项极其复杂和乏味的任务过程,因为在调试的所有阶段都需要解决错误。

为什么需要调试?

一旦开始写代码,调试过程就开始了。然后,当代码与其他编程单元结合形成软件产品时,调试将在后续的阶段中继续进行。调试有许多好处,例如:

  • 立即报告错误状况。这使我们更早地检测到错误,并使软件开发能顺利进行下去。
  • 它还提供关于数据结构的最大限度的有用信息及简单解释。
  • 调试帮助开发人员减少无用的和分散注意力的信息。
  • 通过调试,开发人员可以避免复杂的一次性测试代码,节省软件开发的时间和精力。

调试步骤

调试过程的主要步骤:

1. 识别错误(Identify the Error):错误识别可能会导致浪费开发时间。由用户报告的错误是很难解释的,有时我们收到的信息也具有误导性。调试是用来识别实际错误的的最佳方式。

2. 定位错误位置( Find the Error Location):准确地识别错误后,需要遍历代码以找到错误所在的确切位置。在这个阶段,你需要集中精力去找,而不是去理解它。

3. 分析错误(Analyze the Error):在第三步中,你需要从错误位置使用自下而上的方法并分析代码。这有助于理解错误。分析bug有两个主要目标:检查错误周围是否有其他错误,以及避免在修复中输入任何风险代码。

4. 验证分析(Prove the Analysis):一旦完成了对原始bug的分析,你需要找到应用程序上可能出现的更多错误。这一步涉及到在测试框架的帮助下为这些区域编写自动化测试。

5. 覆盖横向损坏(Cover Lateral Damage):在这个阶段,你需要为将要更改的代码创建单元测试。现在,如果运行这些单元测试,它们都应该通过。

6. 修复与验证(Fix & Validate): 最后一个阶段是修复所有错误并运行所有测试脚本,以检查它们是否都通过。

调试策略

  • 必须要深入理解整个系统,这有助于开发者对调试的程序作出正确判断。
  • 对问题进行“回溯分析”,即从错误的位置开始向前跟踪所有代码,以确定故障代码的区域。你需要彻底研究整个区域,以找到错误的原因。
  • “前向分析”即在程序的不同位置打断点或打印语句来前向跟踪代码执行过程。重要的是关注获得错误区域的输出内容。
  • 必须已经积累的开发经验来检查类似的问题。这种方法的成功取决于开发者的专业知识。

调试工具

调试工具是用来测试和调试其他程序的计算机程序,比如 gdb 和 dbx 等,也具备基于控制台的命令行界面。一些自动调试工具包括基于代码的跟踪器、探查器、解释器等。

以下是一些广泛使用的工具列表:

  • Radare2
  • WinDbg
  • Valgrind

此外,IDE 也集成了一些调试工具,帮助开发者捉虫子。

参考文献

https://www.edureka.co/blog/what-is-debugging/

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

关注微信公众号,读文章、听课程,提升技能