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

在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]

哪里 您的姓名 и KEY – 许可证注册的名称和许可证密钥。 可选参数 -要么 允许您设置生成许可证文件的路径。 默认存放在目录下 〜/.config/PVS-Studio/.

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

项目验证

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

  1. 编译监控;
  2. 直接从构建系统运行构建过程。

我们首先考虑第一种方法。 要在 Linux 下开始监控,您需要一个实用程序 痕迹。 分析器使用它来收集有关项目构建期间正在运行的进程的信息。

启动是通过以下命令完成的:

pvs-studio-analyzer trace -- make

此示例使用 make 进行构建,但 make 可以替换为用于启动构建的任何其他命令。 命令行参数可以按照通常的方式传递给它。

构建后,strace 将创建一个文件,解析器将使用该文件检查源代码。 您可以使用以下命令开始分析

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

输出将是一个包含结果的编码文件,您可以将其转换为支持的格式之一。 我们将在下一节中讨论如何使用报表。

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

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

应该注意的是,分析器通过其可执行文件的名称来识别所使用的编译器。 如果检查时出现“No Compilation Units found”错误,请尝试通过参数指定您的编译器名称 --编译器 или -C:

pvs-studio-analyzer analyze -c MyCompiler

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

除了在监视模式下运行之外,您还可以将分析器集成到构建系统或 IDE 中。 您可以在以下位置找到已配置集成的项目示例: GitHub上 在 PVS_Studio 存储库中:

有关在 Linux 下运行分析的更详细说明,请参阅 文件资料.

使用报告

检查设计后,分析器会生成编码报告。 为了将其转换为支持的格式之一,您应该使用该实用程序 plog转换器,与PVS-Studio一起安装。

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

  • 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

执行命令后会创建一个目录 /路径/报告目录,其中将包含报告文件。

注意关键 -a。 它允许您指定报告中应包含哪些警告。 如果需要过滤分析仪的输出,这很方便。 上述命令将生成一个报告,其中仅包含来自第一和第二置信水平的一般分析组的警告( и ).

报告示例:

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

单击单元格时 地点 消息,可以跳转到相应的代码行:

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

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

分析仪抑制

当使用静态分析器检查代码时,可能会出现误报或根本不需要的消息(噪音)。 PVS-Studio 提供了抑制此类警告的机制。 对于单独的警报抑制,您可以应用文档部分中描述的方法之一“误报抑制«。

此外,在分析旧代码时,可能有必要大规模抑制所有消息。 通常,为了仅检查添加到现有代码库的代码,这是必要的。 为此,请使用参数 压制 公用事业 pvs-studio-分析仪.

您可以使用以下命令批量抑制报告中的消息:

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

有关被抑制消息的信息存储在文件中 抑制_base.json,位于该项目旁边。 在后续检查中,此类消息将被排除在报告之外。

文档中更详细地描述了此机制。 这里.

结论

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

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

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

来源: habr.com

添加评论