PVS-Studio:未找到编译单元

PVS-Studio: No compilation units were found

我在基于 ubuntu:18.04 的 docker 图像中使用 PVS-Studio,用 arm-none-eabi-gcc 交叉编译几个文件。 pvs-studio-analyzer trace -- .test/compile_with_gcc.sh strace_out 文件成功创建后,它不是空的并且包含对 arm-none-eabi-gcc.

的调用

但是 pvs-studio-analyzer analyze 抱怨“找不到编译单元”。我尝试使用 --compiler arm-none-eabi-gcc 密钥但没有成功。

有什么想法吗?

我们已经审核了 stace_out 文件。如果源文件和编译器位于 stace_out 文件中的绝对路径,则分析器可以正确处理它。我们有一个可能对您有帮助的建议。您可以在对 pvs-studio-analyzer -- tracepvs-studio-analyzer analyze 的调用中“包装”构建命令,并将它们放在您的脚本中 (compile_with_gcc.sh)。因此,脚本应以命令开头:

pvs-studio-analyzer trace --

并以命令结束:

pvs-studio-analyzer analyze

这样我们将确保构建和分析是在同一个容器中启动的 运行。如果建议的方法没有帮助,请通过命令更详细地描述构建项目和 运行 分析器的过程。也告诉我们容器是否重新运行s 之间build 和形成strace_out,以及分析本身。 如果您 运行 带有可选 --dump-log 标志的 pvs-studio-analyzer 命令并将其提供给我们,这也会对我们有很大帮助。可用于执行此操作的命令示例:

pvs-studio-analyzer analyze --dump-log ex.log

另外,似乎无法快速解决问题,通过产品网站上的反馈表继续对话可能更方便。

问题出在我的编译方法上。我没有使用适当的构建系统,而是使用了一个古怪的 shell 脚本(当然,我认为,对 3 个文件使用构建系统是一种矫枉过正,shell 脚本不会伤害任何人)。在该脚本中,我使用 grep 在源代码中重新定义了一个常量 - 有点像这样:grep -v -i "#define[[:blank:]]\+${define_name}[[:blank:]]" ${project}/src/main/main.c | ~/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gcc -o main.o -xc

所以编译器实际上 编译了一个正确的文件,它编译了 grep 的输出。所以很自然地,PVS-Studio 无法分析它。

TL;DR: 不要使用 shell 脚本作为构建系统。