Java的Coverity静态分析:查找不适当的异常处理
我们已经为Java(5.5.1版)测试Coverity静态分析几个月了。发现这些潜在的资源泄漏非常好,但我们也希望能够找到不适当的异常处理。 最简单的情况是,我们只想找到所有忽略异常的地方,例如:Java的Coverity静态分析:查找不适当的异常处理,java,exception-handling,static-analysis,Java,Exception Handling,Static Analysis,我们已经为Java(5.5.1版)测试Coverity静态分析几个月了。发现这些潜在的资源泄漏非常好,但我们也希望能够找到不适当的异常处理。 最简单的情况是,我们只想找到所有忽略异常的地方,例如: catch (SomeException se) { // TODO Auto-generated catch block } catch (Exception e) { e.printStackTrack(); } 以及捕获顶级异常的位置,例如: catch (SomeExcep
catch (SomeException se) {
// TODO Auto-generated catch block
}
catch (Exception e) {
e.printStackTrack();
}
以及捕获顶级异常的位置,例如:
catch (SomeException se) {
// TODO Auto-generated catch block
}
catch (Exception e) {
e.printStackTrack();
}
Coverity的手册谈到了使用自定义建模,但我不确定这是否是一个合适的解决方案。提前感谢。目前还没有像C/C++那样支持为Java编写自定义检查程序的功能,但我相信它将来会提供。这是创建标记要查找(和修复)的特定行为的检查器的最佳方法
Coverity Java analysis也运行FindBugs作为其一部分-FB是否有捕获未抛出异常的警告?我相信这可能会解决你的第二个案子。我想他们也有一个空的catch块,尽管我现在找不到它的链接。“Coverity的手册谈到了使用自定义建模,但我不确定这是否是一个正确的解决方案。”-这样做肯定没有错。。。如果这就是你要问的。如果你只想检测这两个例子,那么你可以使用任何类型的工具进行常规搜索,例如Perl。您必须包含子regexp以忽略catch块中的注释和空格。PMD为youThanks、Asya执行此操作。我想这就是你所指的:。这对我的情况没有帮助,因为在try块中抛出了一些更窄的异常,如java.lang.IllegalArgumentException,随后的catch块将捕获java.lang.exception。我们希望寻求静态分析的帮助,不鼓励这种做法。我找不到适合我提到的两种情况的检查器…Coverity for Java的某些未来版本可能会支持编写自定义检查器,与他们的C/C++分析SDK相同。