前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Linux平台开发C++时用PVS-Studio静态分析代码

在Linux平台开发C++时用PVS-Studio静态分析代码

作者头像
FB客服
发布2019-10-10 16:17:15
2.4K0
发布2019-10-10 16:17:15
举报
文章被收录于专栏:FreeBufFreeBuf

PVS-Studio支持分析用C, C++,C#和Java开发的项目。你可以在Windows,Linux和macOS下使用它。本文将为大家简单演示,如何在Linux环境下使用PVS-Studio来分析C和C++代码。

安装

在Linux下安装PVS-Studio有多种方法,这具体取决于你的发行版类型。最方便和首选的方法是使用存储库,因为它允许在发布新版本时自动更新分析器。另一个选择是使用安装包,你可以在这里找到它。

安装命令也因你使用的Linux发行版而异。例如,这是基于Debian的存储库安装命令:

代码语言:javascript
复制
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:

代码语言:javascript
复制
sudo gdebi pvs-studio-VERSION.deb

安装过程在“Linux安装和更新PVS-Studio”文档部分有更详细的描述。你还可以在那里找到非Debian系统的信息。

安装PVS-Studio后,需要输入数据许可。命令如下:

代码语言:javascript
复制
pvs-studio-analyzer credentials NAME KEY [-o LIC-FILE]

NAME和KEY分别是注册用户名和许可证密钥。可选参数-o允许你指定将生成许可证文件的位置。默认情况下,它将被存储在~/.config/PVS-Studio/目录中。

如果你需要试用密钥,可以在“下载和评估PVS-Studio”页面上获取。

检查你的项目

安装完成后,就可以开始检查项目了。其主要有两种方法::

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

我们先来谈谈第一种方式。要在Linux下启动监视,需要strace程序。PVS-Studio使用它来收集在构建期间启动的进程列表和参数。

使用以下命令启动构建:

代码语言:javascript
复制
pvs-studio-analyzer trace -- make

这里使用make,但你正在运行的用以构建项目的任意其他命令都可以在这个位置。如果需要,你还可以用通常的方式将命令行参数传递给它。

构建之后,strace将创建一个文件,然后分析器将使用该文件来检查源代码。启动分析的命令如下。

代码语言:javascript
复制
pvs-studio-analyzer analyze -o /path/to/project.log

这将生成一个编码的日志文件,你可以将其转换为受支持的格式。稍后我们将讨论如何处理报告的问题。

除了strace之外,你还可以基于compile_commands.json(JSON编译数据库)文件进行分析。许多构建系统都有导出编译命令的内置方法,或者你可以使用BEAR程序来执行此操作。以下是在这种情况下启动分析的命令:

代码语言:javascript
复制
pvs-studio-analyzer analyze –f /path/to/compile_commands.json

请注意,分析器通过其可执行文件名识别构建过程中使用的编译器。如果在尝试分析项目时遇到“No compilation units found”错误,请尝试通过-compiler或-c命令行键显式指定编译器的名称:

代码语言:javascript
复制
pvs-studio-analyzer analyze -c MyCompiler

如果你正在使用交叉编译,或者你的编译器具有非标准可执行文件名,则可能需要此项。

除监控模式外,你还可以将分析器直接集成到构建系统或IDE中。我们的官方GitHub存储库提供了已配置集成的示例项目:

pvs-studio-cmake-examples pvs-studio-qmake-examples pvs-studio-makefile-examples pvs-studio-waf-examples pvs-studio-eclipse-examples

要了解有关在Linux下运行分析器的更多信息,请参阅文档。

报告

检查项目后,分析器会创建一份编码报告。要将其转换为受支持的格式,你需要使用PVS-Studio安装附带的plog-converter实用程序。

以下是支持的格式列表:

xml-一种便于进一步处理分析结果的格式,SonarQube插件支持该格式; csv - 文件以纯文本形式存储表格数据(数字和文本); errorfile - gcc和clang的输出格式; tasklist - 可以在QtCreator中打开的错误格式; html - html报告,包含分析结果的简短描述; fullhtml - 报告根据源码中的不同参数和导航对分析结果进行排序。

fullhtml格式是查看报告最方便的格式,因为这种格式支持你直接跳转到你感兴趣的警告相对应的代码行。以下是将你的报告转换为该格式的命令:

代码语言:javascript
复制
plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir

当你启动它时,名为/path/report_dir的新创建目录将包含所有报告文件。

注意-a参数。它允许你指定应在结果报告中显示的警告内容。如果你需要过滤分析器的输出,这会非常方便。上面的命令将创建一份报告,其中将仅包含第一和第二确定性级别(高和中)的一般分析消息。

一份示例报告:

通过在消息的位置单元格中单击,你可以跳转到相应的代码行:

通过单击代码列中的诊断代码,你可以打开有关此诊断的文档。

抑制分析警告

使用任何静态分析器检查源代码时,都有出现误报的可能,或者出现一些无关紧要的警告。PVS-Studio具有抑制此类消息的方法。要定位单个警告,你可以使用“抑制错误警报”文档中描述的方法。

此外,在检查旧代码时,你可能还希望抑制所有警告。通常,如果你只是想检查添加到现有代码库的新代码,则可能需要此选项。你可以使用pvs-studio-analyzer的suppress参数。

你可以使用以下命令批量抑制报告中的警告:

代码语言:javascript
复制
pvs-studio-analyzer suppress /path/to/report.log

有关已抑制警告的信息存储在名为suppress_base.json的文件中。此类消息不包括在后续检查的报告中。

总结

以上就是关于在Linux下使用PVS-Studio的简要说明。我希望它有用并解答一些最常见的问题。如需了解有关本主题的更多内容,请参阅此处的文档。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 检查你的项目
  • 报告
  • 抑制分析警告
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档