0

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

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

有任何想法吗?

4

2 回答 2

1

问题在于我的编译方法。我没有使用适当的构建系统,而是使用了一个古怪的 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 脚本作为构建系统。

于 2021-02-28T15:23:15.067 回答
0

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

pvs-studio-analyzer trace --

并以命令结束:

pvs-studio-analyzer analyze

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

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

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

于 2021-02-20T09:10:12.563 回答