我需要确定特定代码行中变量的可能值范围。 在复杂的项目中,这可能非常繁琐且容易出错。 这就是为什么我寻求自动完成这项任务的可能性。 想象一下以下简单的代码片段:
#define checkBoundary(value) if((value)<100 || (value)> 1000) return;
bool checkmaximumForMode0(value)
{
return (value>100);
}
void main(void)
{
int mode = rand()%4;
// x shall be any valid value for an int, just for the sake of completion i use rand here.
int x = rand();
if (x < 0)
return;
switch(mode)
{
case 0:
if(checkmaximumForMode0(x)) return;
case 1:
checkBoundary(x);
default:
if (x<10000)
goto exit;
}
// Now i want to know, which value range of x will i have under what circumstances
int isChecked = x;
// For this easy example:
// Codepath 1(mode = 0): x >= 0 && x <= 100
// Codepath 2(mode = 1): x >= 100 && x <= 1000
// Codepath 3(mode = 2..3): x >= 10000 && x <= maxint
exit:
print( "Exiting");
return
}
是否有人知道完成此任务的工具或任何其他方式? 此外,我想根据一组给定的值范围检查结果值范围,理想情况下只能得到不兼容性。
答案 0 :(得分:1)
我们目前正在使用clang静态分析器(http://clang-analyzer.llvm.org/)和cppcheck(也适用于C):http://cppcheck.sourceforge.net/
cppcheck(除了许多额外的检查)能够通过分析数据流来检查缓冲区的边界访问。另见:http://sourceforge.net/p/cppcheck/wiki/ListOfChecks。
最后但并非最不重要的是,sonarqube附带了一些额外的检查(您必须为C / C ++插件付费),并且能够在网页上显示所有内容。可以连接到Jenkins,也可以集成cppcheck结果和/或代码覆盖: http://www.sonarqube.org
答案 1 :(得分:0)
Polyspace能够分析价值范围,但它是一种专有解决方案。