技巧和窍门–使用C中的assert压缩bug的8条技巧

嵌入式软件开发人员可用的最大的漏洞消除工具之一是C中的assertion宏。尽管有ASSERT的功能,但我很少看到它实现,并且在使用它的情况下,实现有缺陷或不正确。以下技巧不仅有助于阐明何时何地使用ASSERT,还有助于阐明如何正确开始使用它。

苍蝇拍

提示1 – 记住福建省体彩网的定义

对于许多开发人员而言,福建省体彩网是一个令人困惑的话题,因为它们倾向于以未设计福建省体彩网的方式使用福建省体彩网。我遇到过的福建省体彩网最清晰的定义是:

“福建省体彩网是在程序中特定点的布尔表达式,除非程序中存在错误,否则它将为真。”

检查以上福建省体彩网定义的开发人员应注意三个关键点:

  • 福建省体彩网将表达式评估为真或假
  • 福建省体彩网是对代码中特定点的系统状态的假设
  • 该福建省体彩网正在验证一个系统假设,即如果假设不正确,则表明代码中存在错误。

提示2 – 使用ASSERT验证功能前提条件

福建省体彩网在按合同设计的环境中非常有用,在该环境中,开发人员已明确定义了功能的前提条件。该福建省体彩网可用于检查功能输入是否满足前提条件。以图1中的以下代码片段为例:

图1 –功能前提

 

功能的状态输入应在定义的系统状态之内。如果状态超出有效状态,则不是错误而是错误!可以使用一个福建省体彩网来验证该状态有效的假设,如下图2所示:

图2 –函数前提条件的福建省体彩网

如果State不小于最大值,则福建省体彩网表达式将被评估为false,然后程序执行将停止。停止程序执行使开发人员很容易立即查看代码出了问题的地方,而无需花费很多时间。

提示3 – 使用ASSERT验证功能后置条件

福建省体彩网还可用于验证按合同设计环境中功能输出的假设。例如,如果先前定义的System_StateSet函数返回了SystemState变量,则开发人员将期望它也在预期范围内。可以使用一个福建省体彩网来监视错误,如图3所示:

图3 –功能发布条件的福建省体彩网

检查以上代码,开发人员可能会觉得这些检查毫无价值。刚设置后的SystemState怎么可能大于SYSTEM_STATE_MAX?答案是不应该这样,这就是为什么如果它确实有所改变(例如通过中断或并行线程),则福建省体彩网将立即标记该错误。

提示4 – 不要使用ASSERT进行错误处理

记住福建省体彩网的定义后,开发人员应该牢记它们是福建省体彩网是用于检测错误,而不是用于错误处理。错误处理软件旨在响应不正确的用户输入和意外的事件序列。可能会在系统中发生错误,但仅由于输入无效,并不意味着代码具有

一个错误。错误处理应与错误查找分开进行。不正确使用福建省体彩网的经典示例是在尝试打开文件进行读取时检查文件指针。一个示例如图4所示。

图4 –不正确使用福建省体彩网

读者可以清楚地看到,尝试打开文件的结果取决于文件系统和用户数据的状态,而与代码中的错误完全无关。开发人员应该编写一个错误处理程序,而不是声明,这样,如果文件不存在,则错误处理程序将使用一些默认的可用数据创建该文件,以进行后续代码处理。

提示5 – ASSERT用于开发而非生产

ASSERT宏的最初意图是在开发过程中启用它,然后在生产中禁用它。使用宏NDEBUG来启用和禁用ASSERT。禁用后,正确实现的福建省体彩网对嵌入式系统几乎没有影响。

问题是,如果在启用福建省体彩网的情况下进行测试(应捕获任何错误),则现在将其关闭会导致产品的出厂状态不同于被测试的状态。福建省体彩网确实会占用一些代码空间,但更重要的是,它们需要几个时钟周期来评估其布尔表达式。资源有限的裸机系统可能会由于关闭福建省体彩网而极大地影响其执行时间,从而导致生产系统中出现新的错误。开发团队需要决定是否应该承担福建省体彩网的风险。

一种替代方法是使福建省体彩网保持启用状态,并将其输出重定向到系统日志。这将确保可以轻松识别任何遗留的错误,但避免停止系统,这可能是不明智的。

提示6 – 不允许福建省体彩网产生副作用

ASSERT的默认实现将允许开发人员将可执行代码包含为布尔表达式的一部分。例如,状态变量可以作为传递给ASSERT的表达式的一部分来实现。但是,如果传递给ASSERT的表达式具有副作用,即它更改了嵌入式系统的状态,那么禁用福建省体彩网将更改系统’的行为。开发人员应确保他们的表达式没有副作用,否则他们冒着将睡眠时间错误添加到系统中而只会唤醒生产代码的风险。

提示7 – 福建省体彩网应占代码的百分之一至三

每个开发人员对于一个代码库中应该存在多少个福建省体彩网都有自己的看法。可以商定的一个数字是,代码库中的福建省体彩网百分比应大于零。福建省体彩网为开发人员提供了一种在代码库中立即发现错误的好方法。调试是最大的时间浪费之一,并且不利于开发嵌入式系统。无论开发人员的数量是百分之一,百分之三或百分之五,都可以使用福建省体彩网来发挥自己的优势,并使嵌入式软件的开发更加有趣。

提示8 – 使用福建省体彩网作为可执行代码注释

福建省体彩网引起了好评!一个写得很好的表达式可以告诉开发人员确切的期望值。开发人员应设计其福建省体彩网,以更清楚地了解系统中正在发生的事情,从而有助于减少错误。

结论

福建省体彩网是一个了不起的工具,许多嵌入式软件开发人员都忽略了。本文探讨的七个技巧只是如何正确使用福建省体彩网的冰山一角。读者可以采取的下一步是在测试平台上设置并开始使用福建省体彩网,并研究它们在真实嵌入式系统中的工作方式。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.