如何使用 Coverity 建模将方法标记为不返回?
How do I use Coverity modelling to mark a method as non-returning?
我正在为一个学习项目使用免费 Coverity Scan 服务,我想将一些方法建模为总是抛出异常,或者在内部调用 System.exit()
,因此不返回,在为了从 Coverity 的流量分析中获得更好的结果。
例如:
class Foo {
// given these
Blarg fieldFromTheClass
void fail(String s, int a, int b) {
throw new DomainSpecificBlahBlahException(s, someFunction(a), someOtherFunction(a, b), fieldFromTheClass, collaborator.getBaz());
}
void fatal(Strin s) {
System.out.println("Fatal error: " + s);
System.exit(1);
}
// we should get 2 flags here
void test(int i) {
if (i%2==0) {
try {
fatal("foobar");
} catch (SecurityException se) {
// recovering from security manager - should be flagged as unreachable in normal circumstances
}
} else {
fail("baz", 1, 3);
}
doSomethingElse(); // unreachable
}
}
使用建模文件的方法是什么?
此外,Coverity 注释是否在任何 public 存储库(即 Bintray 或 Central)中可用?
Coverity 应该会自动找出哪些函数因某种原因退出或永不退出 return,但它确实似乎遗漏了一些。
在这种情况下,您可以对函数建模,该模型看起来像这样:
#ifdef __COVERITY__
void fatal(String s) {
__coverity_panic__();
}
#else
// real definition of fatal
(coverity_installation)/library 中应该有一些示例。
我正在为一个学习项目使用免费 Coverity Scan 服务,我想将一些方法建模为总是抛出异常,或者在内部调用 System.exit()
,因此不返回,在为了从 Coverity 的流量分析中获得更好的结果。
例如:
class Foo {
// given these
Blarg fieldFromTheClass
void fail(String s, int a, int b) {
throw new DomainSpecificBlahBlahException(s, someFunction(a), someOtherFunction(a, b), fieldFromTheClass, collaborator.getBaz());
}
void fatal(Strin s) {
System.out.println("Fatal error: " + s);
System.exit(1);
}
// we should get 2 flags here
void test(int i) {
if (i%2==0) {
try {
fatal("foobar");
} catch (SecurityException se) {
// recovering from security manager - should be flagged as unreachable in normal circumstances
}
} else {
fail("baz", 1, 3);
}
doSomethingElse(); // unreachable
}
}
使用建模文件的方法是什么?
此外,Coverity 注释是否在任何 public 存储库(即 Bintray 或 Central)中可用?
Coverity 应该会自动找出哪些函数因某种原因退出或永不退出 return,但它确实似乎遗漏了一些。 在这种情况下,您可以对函数建模,该模型看起来像这样:
#ifdef __COVERITY__
void fatal(String s) {
__coverity_panic__();
}
#else
// real definition of fatal
(coverity_installation)/library 中应该有一些示例。