我想得到那些使用或评估Coverity静态分析Java代码的人的意见.我知道它在C/C++世界很受欢迎,但是值得花钱进行Java分析还是我最好用PMD,Findbugs和其他开源工具?
我在项目中使用Coverity Prevent来查找错误.
它报告此表达式的错误(变量名称当然已更改):
x=
(a>= b) ?
++x: 0;
Run Code Online (Sandbox Code Playgroud)
消息是:
EVALUATION_ORDER缺陷:在"
x=(a>= b) ? ++x: 0;
"中,"x
"写在"x
"(赋值LHS)中并用"(a>= b) ? ++x: 0;
" 写入,但副作用发生的顺序是不确定的,因为没有中间序列点.消息结束
虽然我可以理解" x = x++
"是不确定的,但这对我来说有点困难.这个是假阳性吗?
在我的代码上运行Coverity会导致受污染的字符串错误消息.我正在使用堆栈中声明的"path"变量,所以我不确定为什么我会看到错误.我只能认为getenv()
直接使用strncpy()
是导致错误.下面的修复会消除这个错误吗?
char path[1024] = {NULL, };
if(getenv("A"))
strncpy(path, getenv("A"), strlen(getenv("A")));
Run Code Online (Sandbox Code Playgroud)
至
char path[1024] = {NULL, };
char * adriver = getenv("A");
if(adriver)
strncpy(path, adriver, strlen(adriver));
Run Code Online (Sandbox Code Playgroud) 我使用的是Wind River Compiler 4(gcc(C)和g ++(C++)),它可以毫无问题地编译我的所有项目.现在我必须使用Coverity Static Analysis来检查我的代码.我已经配置了特定的编译器.对于C代码(gcc)没有问题,我可以运行分析,但对于C++ - Code(g ++),我遇到了很多错误:
.../c++config.h", line 214: error #40:
expected an identifier
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", line 214: error #326:
inline specifier allowed on function declarations only
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", line 214: error #65:
expected a ";"
inline namespace __gnu_cxx_ldbl128 { }
^
.../include/string.h", line 76: error #312:
cannot overload functions distinguished by return type alone
extern __const void *memchr (__const void *__s, int __c, size_t __n) …
Run Code Online (Sandbox Code Playgroud) c++ static-analysis coverity-prevent c++11 inline-namespaces
我需要至少做一些努力从我的源代码中删除从未使用过的代码.一般的偏好是使用静态代码分析工具.我们在其他项目中运气很好,但我听到的人大多是从事设备级代码的C/C++开发人员.
我是一名从事Java EE系统的Web开发人员.最受青睐的分析工具是Coverity Prevent,尽管我可以提出一些其他的建议,如果我能够证明它更适合我们正在开发的技术.
我发现自己很可疑 - 当你在一个有很多抽象的系统上运行时,静态代码分析对死代码的有效性是什么?例如,我们使用Spring的依赖注入,以及JSF.在这两种情况下,都没有简单的方法来跟踪从前端到后端的函数调用,并完整地了解被调用的内容和不调用的内容.
我非常担心死代码检查中的误报将首先超过运行该工具的价值.
这种情况有什么经验?当您的架构使用了大量抽象时,您是否设法从静态代码分析工具中获取价值?你有什么必须做的才能让它以最少的误报工作吗?
在一些我无法修改的头文件中,我有以下一组定义:
#define FLAG1 (0x0000_0001)
#define FLAG2 (0x0000_0002)
...
Run Code Online (Sandbox Code Playgroud)
然后,在我的代码中我在switch中使用它们:
switch (aaa) {
case FLAG1:
....
case FLAG2:
....
}
Run Code Online (Sandbox Code Playgroud)
因此,Coverity报告每个案例标签有2个缺陷:
RW.EXP_RPAREN:
Event exp_rparen: expected a ")"
RW.CASE_LABEL_CONFLICT:
Event case_label_conflict: case label value has already appeared in
this switch at line XX
Run Code Online (Sandbox Code Playgroud)
这些案例标签有什么问题?它违反了C标准吗?
正如标题所示,例如,在85%的情况下,我想检查foo()的返回代码,但有时我真的不关心它,但这会引起Coverity警告.
处理这个问题的最佳方法是什么?更改Coverity设置不计算在内.:)
我在C++项目中使用Coverity Prevent.有没有办法直接在源代码中标记误报?
MyClass* const Func(const std::string& statename)
Run Code Online (Sandbox Code Playgroud)
因为这个封面是错误的
返回类型的解析警告(PW.USELESS_TYPE_QUALIFIER_ON_RETURN_TYPE)类型限定符无意义.
我们真的需要在这里删除const吗?
c++ static-analysis coding-style coverity-prevent function-signature
我正在为下面的一段代码获得一个覆盖静态检查工具警告.
double value = 0;
std::string origValue("0.50");
value = 0.10 * boost::lexical_cast<double>(origValue);
Run Code Online (Sandbox Code Playgroud)
警告是"溢出的返回值(INTEGER_OVERFLOW)".我无法理解上面的代码有什么问题.当我使用双打时,整数溢出是如何进行的?谢谢.
我们有"覆盖"工具设置,并试图找到一种方法将数据库备份到文件,它使用我相信PostgreSQL.我们怎么能这样做,它是否使用自己独立的PostgreSQL安装?
当我对 python 代码(静态代码分析)运行覆盖扫描时,检测到 REVERSE_INULL 和 FORWARD_NULL 错误。谁能说出 REVERSE_INULL 和 FORWARD_NULL 之间的区别?为什么会检测到这些错误。
coverity-prevent ×12
c++ ×5
c ×2
coding-style ×2
coverity ×2
abstraction ×1
c++11 ×1
java ×1
jsf ×1
postgresql ×1
spring ×1