我们使用Klocwork作为静态分析工具.
Klocwork是一种商业工具,具有许多优点,但也存在假阳性等局限性.
我想知道谁曾将Klocwork与Findbugs等其他开源工具进行比较.
通常,已知商业工具比开源工具更可靠.
但我认为Klocwork在特定业务领域也有一些可靠的问题,比如android.
你能否说Klocwork优于其他开源工具,尤其是Findbugs在误报和漏报方面?
我一直在寻找工具来帮助检测阻止程序作为64位代码正常运行的错误.最近,我一直在玩弄Klocwork及其自定义检查器功能,这让我可以使用XPath将源代码导航为树.这对于正则表达式来说是一种"更聪明"的替代方法,但我无法让它知道类型.
例如,假设我想找到一个for
使用a int
或a long
计数的循环的每个实例.以下代码很容易找到.
for (int i = 0; i < 10; i++)
// ...
Run Code Online (Sandbox Code Playgroud)
搜索此代码很简单,因为变量定义就在循环内部.但是,请考虑以下示例.
int i;
// ...
for (i = 0; i < 10; i++)
// ...
Run Code Online (Sandbox Code Playgroud)
这很难找到,因为变量定义与循环是分开的,并且必要的XPath表达式要么笨重,要么容易出错.
那么,自定义Klocwork规则可以找到这样的表达式,其中类型感知是必要的,包括解析typedef
和#define
语句?还有其他工具可以做到这一点吗?
编辑1:考虑以下示例.
typedef int myint;
void Foo() {
int i;
for (i = 0; i < 10; i++) {
Bar();
}
myint j;
for (j = 0; j < 10; j++) {
Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
char imei_temp[14] = {0, };
strcpy(imei_temp, "00000000000000");
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这是有效的代码.
但是Klocwork说缓冲区溢出,' imei_temp
'的数组索引可能超出范围.imei_temp
大小为14的数组' '可以使用索引值0..14
通过klocwork分析时,以下行
pTxData[index] = ( UINT8_C(0) << UINT8_C(4) );
Run Code Online (Sandbox Code Playgroud)
给出错误
按位运算的操作数的类型为“符号字符”,而不是“无符号整数”
我已经通过删除任何问题将问题减少到最低程度,#define
并且完全不知道为什么会发生这种情况。
我必须使用Klocworks对iPhone应用程序进行静态分析.我在mac os X上安装了Klockworks,项目是使用XCode编写的.
但我没有开发人员证书(并且不想购买它们,因为我只想进行静态分析).使用xocdebuild命令不构建应用程序.
有人可以告诉我怎么做xcode项目的静态分析?
谢谢.
对于以下代码,klocwork报告未经验证的整数值'val'是从'atoi'接收的,可用于访问数组
int main(int argc, char **argv)
{
int i = 0;
int val = 0;
for (i = 0; i < argc; i++)
{
if (argv[i])
{
val = atoi(argv[i]);
......
......
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法解决这个问题.如果argv [i]不是数字,那么atoi将返回0.什么是klocwork在这里期待?