如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?

Ric*_*ski 3 c++ cppcheck

Cppcheck 文档似乎暗示可以跨多个翻译单元进行分析,如--max-ctu-depths标志所示。这显然不适用于这里的玩具示例:

主要.cpp:

int foo();
int main (void)
{
    return 3 / foo();
}
Run Code Online (Sandbox Code Playgroud)

foo.cpp:

int foo(void)
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

即使设置了--enable=all--inconclusive,这个问题也不会出现在报告中。看起来 cppcheck 可能不是为进行跨文件分析而设计的,但该max-ctu-depths标志却有所不同。我在这里错过了什么吗?任何帮助表示赞赏!

Dan*_*äki 5

我是一名 cppcheck 开发人员。

Cppcheck 中的整个程序分析相当有限。我们有一些这样的分析,但它不是很“深入”,也不是很复杂。它当前仅跟踪您传递给函数的值。

一些示例测试用例(请随意将这些代码示例复制/粘贴到不同的文件中):https: //github.com/danmar/cppcheck/blob/main/test/testbufferoverrun.cpp#L4272 https://github.com/ danmar/cppcheck/blob/main/test/testbufferoverrun.cpp#L4383 https://github.com/danmar/cppcheck/blob/main/test/testbufferoverrun.cpp#L4394 https://github.com/danmar/cppcheck/ blob/main/test/testnullpointer.cpp#L3281 https://github.com/danmar/cppcheck/blob/main/test/testuninitvar.cpp#L4723

..然后是整个未使用的功能检查器。

如果您正在使用线程,那么您将不得不使用--cppcheck-build-dir线程来使 CTU 成为可能。