在Linux中开发C ++程序时熟悉PVS-Studio静态分析器

PVS-Studio支持使用C,C ++,C#和Java分析项目。 您可以在Windows,Linux和macOS系统下使用分析仪。 这篇文章将重点分析Linux环境中用C和C ++编写的代码。

安装方式


根据发行版的类型,有几种方法可以在Linux下安装PVS-Studio。 最方便,最可取的方式是使用存储库:这允许您在发布新版本时自动更新分析仪。 第二种选择是使用安装包,可以从此处下载。

您必须完成的安装命令取决于您使用的Linux发行版。 例如,对于基于Debian的系统,从存储库安装如下所示:

wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list sudo apt update sudo apt install pvs-studio 

要从安装包中安装PVS-Studio,可以使用gdebi实用程序:

 sudo gdebi pvs-studio-VERSION.deb 

文档的“ 在Linux上安装和更新PVS-Studio ”部分中对安装过程进行了详细说明。 您还可以在此处找到有关基于非Debian的系统的信息。

安装后,需要输入许可证数据。 为此,请使用命令

 pvs-studio-analyzer credentials NAME KEY [-o LIC-FILE] 

其中NAMEKEY是注册许可证的名称和许可证密钥。 可选的–o参数允许您指定生成许可证文件的路径。 默认情况下,它存储在〜/ .config / PVS-Studio /目录中。

您可以在“ 下载并尝试PVS-Studio ”页面上获得试用密钥。

项目验证


安装分析仪后,您可以开始检查项目。 有两种主要方法可以做到这一点:

  1. 编译监控;
  2. 在组装过程中直接从组装系统开始。

让我们首先考虑第一种方法。 要在Linux下开始监视,您将需要strace实用程序。 分析器使用它来收集有关在项目组装过程中启动了哪些过程的信息。

通过以下命令执行启动:

 pvs-studio-analyzer trace -- make 

本示例使用带有make的构建,但是用于启动构建的任何其他命令都可以代替make。 命令行参数可以按常规方式传递给它。

组装之后,strace将创建一个文件,分析器将使用该文件来验证源代码。 您可以使用以下命令运行分析

 pvs-studio-analyzer analyze -o /path/to/project.log 

输出将是带有结果的编码文件,您可以将其转换为支持的格式之一。 我们将在下一部分中考虑处理报告。

除了使用strace之外,还可以基于compile_commands.json文件(JSON编译数据库)运行分析。 许多构建系统允许您导出编译器调用命令,或者您可以为此使用BEAR实用程序。 在这种情况下,您可以使用以下命令运行分析

 pvs-studio-analyzer analyze –f /path/to/compile_commands.json 

应该注意的是,分析器通过其可执行文件的名称识别使用的编译器。 如果在检查期间收到错误“找不到编译单元”,请尝试通过–compiler–c参数指定编译器的名称:
 pvs-studio-analyzer analyze -c MyCompiler 

当交叉编译并使用带有非标准可执行文件名的编译器时,可能需要这样做。

除了以监视模式启动之外,您还可以将分析仪集成到装配系统或IDE中。 您可以在PVS_Studio存储库中的GitHub找到已配置集成的项目示例:


有关在Linux下运行分析的更多详细说明,请参阅文档

处理报告


检查项目后,分析器将创建一个编码报告。 为了将其转换为支持的格式之一,请使用与PVS-Studio一起安装的plog-converter实用程序。

该实用程序支持以下格式:

  • xml-SonarQube插件支持的一种方便格式,用于进一步处理分析结果;
  • csv是用于显示表格数据的文本格式;
  • errorfile-gcc和clang的输出格式;
  • 任务列表-可以在QtCreator中打开的错误格式;
  • html-带有分析结果简要说明的html报告;
  • fullhtml-html报告,其中按各种参数对分析结果进行排序,并在源代码中导航。

fullhtml格式是查看报告最方便的方法,因为它使您可以转到发生警告的源代码行。 以下命令允许您将分析器报告转换为这种格式:

 plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir 

执行该命令后,将创建目录/ path / report_dir ,报告文件将位于其中。

注意-a开关。 它允许您指定报告中应包括哪些警告。 如果您需要过滤分析仪的输出,这将非常方便。 上面的团队将创建一个报告,其中仅包含来自一般分析组的第一和第二置信度( )警告。

报告示例:

图片9


通过单击消息的“ 位置”单元格,可以转到相应的代码行:

图片8


单击“ 代码”列中的诊断编号将打开描述此诊断的文档。

分析仪响应抑制


当使用静态分析器检查代码时,可能会产生误报或仅产生不必要的消息(噪音)。 PVS-Studio提供了抑制此类警告的机制。 要单独抑制警报,可以使用文档部分“ 抑制虚假警报 ”中描述的方法之一。

同样,在分析旧代码时,可能有必要大量禁止所有消息。 通常,这是仅检查添加到现有代码库中的代码所必需的。 为此,使用了pvs-studio-analyzer实用程序的抑制参数。

您可以使用以下命令在报表中批量隐藏消息:

 pvs-studio-analyzer suppress /path/to/report.log 

有关抑制消息的信息存储在项目旁边的prevent_base.json文件中。 在后续检查期间,此类消息将从报告中排除。

此机制在此处的文档中有更详细的描述。

结论


这是对Linux使用PVS-Studio分析仪的简要介绍。 我希望它有用并回答了最常见的问题。 您可以在此处的文档中阅读有关本文主题的更多信息。



如果您想与讲英语的读者分享这篇文章,请使用翻译链接:Yuri Minaev。 Linux下用于C ++开发的PVS-Studio静态分析器入门

Source: https://habr.com/ru/post/zh-CN462661/


All Articles