如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?
How do you perform cppcheck cross-translation unit (CTU) static analysis?
Cppcheck文档似乎暗示可以跨多个翻译单元进行分析,如--max-ctu-depths
标志所示。这显然不适用于这里的玩具示例:
主.cpp:
int foo();
int main (void)
{
return 3 / foo();
}
foo.cpp:
int foo(void)
{
return 0;
}
即使设置了--enable=all
和--inconclusive
,此问题也不会出现在报告中。似乎 cppcheck 可能不是为了进行跨文件分析而设计的,但max-ctu-depths
标志有所不同。我在这里错过了什么吗?任何帮助不胜感激!
我是一名 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 成为可能。
根据 CTU 检查器的文档和源代码(以及关联的标头(,它不包含交叉翻译单元除以零检查。
CTU 类(和检查器(的少数入口点之一是CTU::getUnsafeUsage
,其描述(在代码中(如下:
强调">
"不安全"功能在写入数据之前无条件读取数据
.."。std::list<CTU::FileInfo::UnsafeUsage> CTU::getUnsafeUsage(...) {
std::list<CTU::FileInfo::UnsafeUsage> unsafeUsage;
// Parse all functions in TU
const SymbolDatabase *const symbolDatabase = tokenizer->getSymbolDatabase();
for (const Scope &scope : symbolDatabase->scopeList) {
// ...
// "Unsafe" functions unconditionally reads data before it is written..
for (int argnr = 0; argnr < function->argCount(); ++argnr) {
// ...
}
}
return unsafeUsage;
}
在CTU 检查器的上下文中,没有提到除以零分析。
似乎cppcheck可能不是为了进行跨文件分析而设计的
基于CTU类公共API的简洁性,cppchecks跨文件分析目前确实有些有限。
- 不同翻译单元中不可重载的非内联函数定义
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 是否允许类在程序中的不同翻译单元之间具有不同的定义?
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 为什么编译器不在同一翻译单元中警告 ODR 违规
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 来自不同翻译单元的函数会干扰吗?
- 如何在C++中的不同翻译单元之间共享枚举的实例
- 在C++中声明"interface",而不是将其 vtable 发送到每个翻译单元
- MSVC 2017 在单个翻译单元中违反静态初始化顺序
- 在不同的翻译单元中启动全局变量(涉及链接)
- 链接器如何处理跨翻译单元的相同模板实例化
- 在不同翻译单元中具有静态存储持续时间的依赖非局部常量浮点变量的常量初始化
- 翻译单元的数量与CPP文件的数量
- GCC 6.3.0 中的 ODR 冲突,类型在两个单独的翻译单元中定义
- 为什么结构和类定义可以在多个翻译单元上重复?
- 如果在同一翻译单元中调用功能,为什么需要搬迁