如何静态检测因代码更改而引入的错误?

时间:2017-07-10 15:46:55

标签: c-preprocessor static-analysis

我有一个大型代码库,主要用C语言编写,有几个枚举。最近我修改了其中一个枚举,它产生了重大影响,因为我有点“错误” - 估计了影响。 有一个看起来像这样的枚举: -

typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = 4,
}en_e;

这已改为

typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = ENUM_VAL_3 ,
}en_e;

我们可以看到ENUM_VAL_MAX的值已被修改。 我的代码中有一些看起来像这样的断言

ASSERT (in_value < ENUM_VAL_MAX )

如果有这样的条件: -

if (in_val < ENUM_VAL_MAX)

我们总是期待in_value < ENUM_VAL_MAX并且随着新的枚举更改,asserts和if条件应该相应地进行修改,但其中一些已经错过,因此问题就出现了。

我的问题是,识别这类错误的最佳方法是什么?是否有一些静态分析器工具可以查看代码差异并相应地分析其影响?对于前者在这种情况下,是否有一个工具可能会指向这些if/assert条件(通过静态解析代码)并发出一些警告?我看着赫尔格林德,但似乎没有帮助。

1 个答案:

答案 0 :(得分:1)

你可能不想听到这个,但是:

  1. 断言应基于记录的行为。在这种情况下,应该在枚举值之上有一个摘要,说ENUM_VAL_MAX大于任何前面的值。

  2. 重构时,请务必右键点击 - &gt;检查引用(大多数IDE都有此选项)并滚动它。您将在概述中看到它正在使用的代码行,因此您将检测到比较。