用于发现64位可移植性问题的静态代码分析工具?

时间:2011-09-19 12:37:11

标签: c++ 64-bit portability static-analysis

我正在寻找将大量代码转换为64位的最佳方法。有人建议我研究一些静态代码分析工具,比如cpptest来发现可移植性问题。有没有人对我有什么建议可以使用?或者将代码移植到64位的有效方法?

环境:windows,vs2008(我知道VS中的“检测64位可移植性问题”选项,但我需要更好)。

示例:一个可以获取这种明显类型的64位可移植性错误的工具。

for (int i = 0; i < 64; i++)
{
    __int64 n64 = (1 << i); // Does not generate warning
}

2 个答案:

答案 0 :(得分:4)

尝试使用PVS-Studio:http://pvs-studio.viva64.com/,它提供了特定的规则集来发现64位可移植性问题

答案 1 :(得分:1)

Frama-C是C(仅)的可扩展分析框架,其plug-in用于检测未定义的行为。

让我们试试你的例子:

main(){
  for (int i = 0; i < 64; i++)
  {
    long long n64 = (1 << i);
  }
}

此插件最初并非用于偶然的错误查找,因此您必须原谅糟糕的界面和相当严格的使用条件:

$ frama-c -val t.c
...
t.c:4:[kernel] warning: invalid shift: assert i ≥ 0 ∧ i < 32;

条件i ≥ 0 ∧ i < 32表示在第4行应该为了定义班次的条件。正如您在向我们指出问题时可以推断的那样,1的类型为int,并且在此体系结构上将其移动超过32是未定义的。

这是你想看到的警告吗?

同样,Frama-C仅适用于C,因此如果您要调查的项目部分位于C中,您可能只会利用它。