COVERITY cov-build 覆盖机制如何运作?

How COVERITY cov-build coverage mechanism works?

我是 c/c++ 的新手,我最近遇到了 coverity 静态分析工具,在构建结束时,我可以看到它显示了已发出的文件数,并且还会有一个发出的文件百分比。

我只想知道这个百分比是怎么得出的。因为如果我们可以计算出文件总数,它们就会多得多

如果有人对此有任何想法,请帮助我。

cov-build 报告其最终状态时,类似于:

933 C/C++ compilation units (62%) are ready for analysis

(例子取自this random build-log.txt),表示Coverity编译器(cov-emit)成功编译了933个文件。百分比62%表示编译尝试次数较多(本例约1504次),但有1504-933=511次编译失败,不予分析。

要处理编译失败,请在 build-log.txt 中查找“[ERROR]”。你会看到像这样的行:

[ERROR] 5 errors detected in the compilation of "../src/tests/common_check.c".

该行上方列出了具体错误。您也许可以根据错误自行找出解决方法;否则,您可以向 Coverity 支持寻求帮助。

如果文件总数(此处为 ~1504)似乎太小,那么您可能缺少编译器配置,因此 cov-build 无法识别您的普通编译器的调用。在 build-log.txt 中,查找显示“EXECUTING:”的行,如果您看到普通编译器的命令行,但后面没有“COMPILING:”,那么问题就来了。使用cov-configure添加编译器配置;有关使用详情,请参阅命令参考。

有关 cov-build 的更多信息,请参阅 Synopsys 文章 Coverity "cov-build" finishes with "No files emitted" for C/C++ code

有关静态分析工具为何完全“构建捕获”的大部分 tool-agnostic 概述,请参阅 SO 问题