程序调试过程
本节阅读量:假设您编写了一个程序,但它不能正常工作。代码编译通过,但当您运行它时,您得到的结果不正确。你肯定在什么地方有语义错误。你怎么能找到它?如果您一直在通过编写一点代码然后测试它,遵循最佳实践,那么您可能会很清楚错误在哪里,或者根本不知道。
所有的错误都源于一个简单的前提:你认为正确的东西,实际存在问题。实际上,找出错误在哪里是具有挑战性的。在本课中,我们将概述调试程序的一般过程。
因为我们还没有涵盖那么多C++主题,所以本章中的示例程序将非常基础。这可能会使我们在这里展示的一些技术显得超出我们目前的需求。然而,请记住,这些技术旨在与更大、更复杂的程序一起使用,并且在那些场景中更有用(这是您最需要它们的地方)。
调试的一般方法
一旦发现问题,调试问题通常包括五个步骤:
- 定位到问题的根因,通常是那些有问题的代码行
- 确保你理解为什么问题会出现
- 准备修复问题的方案
- 修复造成问题的代码
- 测试程序,确保问题修复完成,并且没有引入新的问题
现在,让我们将此过程应用于上一课中的简单程序:
|
|
这段代码有一点很好:错误非常明显,因为错误的答案通过第10行打印到屏幕上。这为我们的调查提供了一个起点。
查找根本原因:在第10行,我们可以看到我们正在传递参数(5和3)的文本,因此那里没有可能错误。由于函数add的输入是正确的,但输出是错误的,因此很明显,函数add产生错误的值。函数add中唯一的语句是return语句,它就是是罪魁祸首。我们找到了问题所在。现在我们知道了应该将注意力集中在哪里,注意到我们是在减法而不是加法,这是通过检查很快能发现的。
理解问题:在这种情况下,很明显,为什么生成了错误的值?我们使用了错误的操作符。
确定修复:我们将简单地将操作符-更改为操作符+。并确保程序重新编译。
重新测试:在实现更改后,重新运行程序,现在产生正确的值8。对于这个简单的程序,这就是所需的所有测试。
这个例子很小,但说明了诊断任何程序时要经历的基本过程。
