如何使用 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 中应该有一些示例。