PVS-Studio是一款能够轻松进行静态代码分析的软件。编程人员必备的静态代码分析软件PVS-Studio。软件可以检测C和C ++应用程序源代码中的错误。它还支持C ++ / CLI和C ++ / CX语言扩展。该分析仪主要是为Visual Studio用户设计的。静态分析器无法替代其他A缺陷搜索工具,而该工具只是对它们的补充。将静态分析工具与开发过程集成在一起,可以消除许多“天生的”错误,从而为您节省了后续的消除时间和资源。众所周知,越早发现错误,越容易解决。结论是应该定期使用静态分析仪,因为这是获得最多静态分析的最佳方法!
安装方式:
获取PVS-Studio安装软件包后,即可开始安装程序。
许可协议批准后,集成选项将可用于Microsoft Visual Studio的各种受支持版本。特定系统上不可用的集成选项显示为灰色。如果系统上有不同版本的IDE或多个IDE,则可以将分析器集成到每个可用版本中。
为确保正确安装PVS-Studio工具,您可以打开“关于”窗口(“帮助” /“关于”菜单项)。 PVS-Studio分析仪必须存在
st在已安装组件的列表中。安装完成后,输入注册码(安装包中提供了注册码)。
软件功能:
PVS-Studio产品包括一组静态分析规则,这些规则旨在检测使用OpenMP技术编写的并行C / C ++程序代码中的错误。
这组规则以前是作为称为VivaMP的独立解决方案提供的。
VivaMP静态分析器现已包含在PVS-Studio软件产品中,并且名称“ VivaMP”与相应的规则集相关联,以搜索并行错误。
IvaVivaMP具有一组专门的规则,使您可以检测到一些导致竞态条件,无效使用处理器时间等错误。
在测试阶段检测这些缺陷的主要困难是它们的不规则性。
静态分析器使用源代码并检查程序执行的所有可能方式。
因此它可以发现一些非常罕见的错误。
另一方面,静态分析无法检测到大多数动态分析器,例如Intel Parallel Inspector。
我们不应该只尝试一种检测并行错误的方法。静态和动态分析在这里相互补充。
与其他类型的分析相比,PVS-Studio工具中使用的静态代码分析方法具有明显的优势。并行程序中的错误通常很难在调试期间调用和检测。静态分析的主要优点是,您不需要启动应用程序,也不需要独立于硬件环境。代码检查过程不会以任何方式破坏代码本身。分析过程完全在人为控制下,程序员决定是否需要对其进行修改。
PVS-Studio工具提供并行代码(帮助系统,文章,示例)以及知识库,这将提高程序员在并行编程领域的知识。
软件特色:
分析在IDE中重新编译后立即自动(递增)分析单个文件。
直观的界面-轻松浏览代码发出的警告。您所需要的一切均在您的指尖-警告中,按照严重性级别,需要进一步修订的突出显示的代码片段以及快速访问文档的方式进行分类。 PVS-Studio文档提供了有关如何解决检测到的错误的方法。
出色的可扩展性-PVS-Studio支持多核和多处理器系统,并且可以指定要使用的核数;可以与IncrediBuild一起使用。
质量警告抑制-抑制“旧”消息,以便分析仪为它们发出0条警告。这使得分析可以在开发过程中的任何时候开始。如果您只需要检查新编写的代码段,这将特别有用。
在PVS-Studio IDE /独立窗口中交互式过滤分析结果(日志文件):发出的警告按诊断号,文件名,诊断文本中的单词以及从分析或掩码中排除文件的能力进行排序;对最近N天内修改过的文件进行分析。
错误警报标志-代码标志,用于禁止特定代码段中的某些诊断;
错误统计信息-错误纠正速度,一段时间内发现的错误数量,未固定的点可以通过图形方式查看(需要Microsoft Excel)。
能够进行夜间检查-分析仪在夜间进行扫描,并在早晨为您提供完整的结果。
命令行项目分析:帮助将PVS-Studio集成到夜间构建中。
报告文件中的相对路径以在不同计算机上查看它们
监视没有Visual Studio项目文件的C / C ++分析项目(.sln / .vcxproj)的编译器监视。如果CLMonitoring还不够,则可以将PVS-Studio直接集成在基于Makefile(或任何其他)的构建系统中。
使用说明:
该分析仪可以顺利集成到VS2005-VS2013中。完成这种集成后,新的“ PVS-Studio”菜单项将出现在IDE的主菜单和用于处理诊断消息的窗口中。
默认设置
安装后,分析仪可以立即工作。在大多数情况下,您无需进行任何设置即可运行您的第一个分析。在继续之前,您可能需要调整的唯一设置参数是从分析中排除第三方库。您不打算修改jpeg库的源文件中的任何内容,是吗?这样就无需对其进行分析了。此外,从分析中排除某些文件夹将有助于减少分析时间。可以通过“选项”->“不检查文件”->“路径掩码”定义要从分析中排除的文件夹。
如果文件的完整路径包含指定名称之一,则不会对其进行分析。默认情况下,该列表已经包含某些文件夹的名称。但是,项目中ZLib库的文件夹可能具有“ zlib”以外的名称,例如“ zip_lib”。因此,您可能需要相应地编辑此列表。要开始编辑,请单击带有三个点的按钮。
以下是您可以在PathMasks列表中使用的有效蒙版的示例:
C:\ Libs \-存储在指定文件夹及其子文件夹中的所有项目文件都将从分析中排除。
\ Libs \或* \ Libs \ *-存储在包含«Libs»子文件夹的文件夹路径中的所有文件都将从分析中排除。如果未指定“ *”字符,则会自动添加它们,因此两种写入掩码的方法相同且正确。
Lib或* Libs *-所有包含名为“ Libs”的子文件夹或将此文本作为其名称一部分的文件路径都将从分析中排除。同样,在这种情况下,所有名称包含文本Libs的文件-例如c:\ project \ mylibs.cpp。为避免混淆,我们建议您始终使用斜杠。
除了排除整个文件夹之外,您还可以指定掩码以排除单个文件。为此,提供了FileNameMasks设置。
项目分析
完成初始设置后,您可以开始分析项目。您最有可能希望检查整个解决方案。为此,请选择菜单项“ PVS-Studio->检查->解决方案”
使用诊断消息列表
分析完成后,所有诊断消息将显示在一个特殊的窗口中。该窗口具有许多控件,所有控件均用于根据各种标准启用或禁用用户感兴趣的诊断消息的显示。乍一看似乎很复杂,所以让我们更详细地研究所有控件。
上下文菜单
双击以转到相关的代码段。右键单击以打开上下文菜单。
菜单非常简单,无需重新加载本文和每个项目的描述。
请注意菜单项“请勿检查文件并隐藏...中的所有消息”。单击它会打开一个可以添加到排除列表的路径的下拉列表。
您可以从Visual Studio中的PVS-Studio菜单手动开始文件,项目或解决方案的分析:
发现的错误将显示在“ PVS-Studio分析结果”工具窗口中。您可以查看错误描述,跳转到代码,对错误进行排序和过滤,将错误标记为错误警报:
每次构建后,PVS-Studio可以自动分析更改的文件。 PVS-Studio支持从命令行执行并与TFS和其他构建自动化系统(如CruiseControl .NET和Hudson)集成。
警告级别和诊断规则集
PVS-Studio将所有警告分为三个确定级别:高,中和低。一些警告涉及特殊的故障类别。让我们更详细地考虑以下级别:
高(1)警告,具有最大的确定性。这些警告通常表示错误,需要立即予以纠正。
中度(2)-低确定性错误仍然值得关注。
低(3)警告度最低,指出代码中的小缺陷。在此级别上的警告通常有很高的误报率。
失败-分析仪的内部警告通知操作过程中的某些问题。这些是在标准输出/标准中由分析器本身(预处理器,指令预处理器CMD)使用的分析期间,对分析器错误(例如消息V001,V003 ANS等)以及该实用程序的任何未处理输出的警告。错误显示。例如,“失败”消息可以是来自p的消息
重新处理程序,有关预处理源代码的错误,访问文件的错误(该文件不存在或被防病毒软件阻止)等。
应当记住,某种错误代码并不一定将其绑定到某种确定性级别,并且各个级别之间的分布在很大程度上取决于生成它们的上下文。 UI中的Microsoft Visual Studio插件和编译器监视诊断消息的输出窗口具有级别按钮,允许按需要对警告进行排序。
分析器具有5条诊断规则:
常规(GA)-常规分析诊断。这是PVS-Studio中设置的主要诊断规则。
优化(OP)-微优化诊断。这些是提高代码效率和安全性的技巧。
64位(64)-一种诊断程序,用于检测与64位应用程序开发相关的特定错误,并将代码从32位平台迁移到64位平台。
客户特定(CS)-根据用户要求开发的高度专门的诊断。默认情况下,这组诊断是禁用的。
MISRA-根据MISRA标准(汽车工业软件可靠性协会)开发的诊断程序。默认情况下,这组诊断是禁用的。
的,具有确定性级别(1,2,3)的诊断组(GA,OP,64,CS,MISRA)的简短描述用于速记符号,例如在命令行参数中。示例:GA:1、2
切换某个诊断规则集将显示或隐藏相应的消息。
您可以在文档的相应部分中找到诊断规则的详细列表。
可以按各种条件对分析器消息进行分组和过滤,以获取有关分析器警告列表工作的更多详细信息。
PVS-Studio和Microsoft Visual Studio
PV安装PVS-Studio时,可以选择分析仪应集成到哪个版本的Microsoft Visual Studio IDE。
确定确定所有必要选项并完成设置后,PVS-Studio将集成到IDE的菜单中。在该图中,您可以看到相应的命令已出现在Visual Studio菜单以及消息输出窗口中。
在设置菜单中,您可以根据需要自定义PVS-Studio,以使其最方便地使用它。例如,它提供以下选项:
预处理器选择;
排除从分析中排除文件和文件夹;
选择分析期间要显示的诊断消息的类型;
许多其他设置。
最有可能的是,当您初次接触PVS-Studio时不需要任何这些,但是稍后它们将帮助您使用此工具来优化工作。
PVS-Studio和IntelliJ IDEA
安装分析仪时,可以将PVS-Studio插件集成到IntelliJ IDEA中,因此您可以直接从IDE执行分析和处理分析仪报告。
安装完成后,该插件将出现在“分析”菜单中(“分析”>“ PVS-Studio”)。下面给出了集成有PVS-Studio插件的IntelliJ IDEA的屏幕截图。
在设置菜单中,您可以禁用诊断规则,从分析中排除文件/目录等。
文档部分“如何运行PVS-Studio Java”介绍了J
Ava分析仪的操作功能。它还提供了其他安装选项,包括为Maven,Gradle安装插件。
C和C ++编译器监视UI(Standalone.exe)
可以独立于Microsoft Visual Stdio IDE使用PVS-Studio。编译器监视UI允许在构建项目时对其进行分析。它还通过单击诊断消息来支持代码导航,并搜索代码片段以及宏和数据类型的定义。
PVS-Studio_Cmd.exe是一个工具,可以从命令行分析Visual Studio解决方案(.sln)和Visual C ++和Visual C#项目(.vcxproj,.csproj)。例如,在需要将静态分析集成到构建服务器上的情况下,这可能很有用。 PVS-Studio_Cmd.exe允许作为目标项目的完整分析和增量(自上次构建以来已更改的文件的分析)执行。使用该实用程序的返回码视图作为位掩码,可以获取有关分析结果的详细信息,并在出现问题时进行识别。因此,使用PVS-Studio_Cmd.exe实用程序,您可以“聪明地”配置用于静态代码分析的方案,并将其嵌入到CI流程中。 “”部分中更详细地描述了PVS-Studio_Cmd.exe模块的使用。从命令行“分析Visual C ++(.vcxproj)和Visual C#(.csproj)项目。
工作在Visual Studio IDE中工作时,您可以运行不同类型的分析输入解决方案,项目文件,选定的项目等。例如,正在运行的分析解决方案的执行方式如下:“ PVS-Studio-> Inspection-> Solution ”。
验证开始后,将出现一个进度条,包括“暂停”(Pause(Pause Analysis))和“停止”(Abort Analysis)按钮。在分析过程中,潜在的危险构造会显示在检测到的错误列表中。
术语“潜在危险结构”是指分析仪将特定的代码行视为缺陷。这条线是否是应用程序中的真正缺陷,仅取决于了解该应用程序的程序员。您必须了解使用代码分析器的原理:在解决解决程序错误的任务时,没有工具可以完全替代程序员。只有依靠他的知识的程序员才能做到这一点。但是该工具可以而且必须帮助他。这就是为什么代码分析器的主要任务是减少程序员必须查看的代码片段的数量并决定如何处理它们。
使用诊断消息列表
真正在一个真正的大型项目中,将不会有数十甚至数百甚至数千条诊断消息,所有这些消息都是一项艰巨的任务。为了简化操作,PVS-Studio分析仪提供了多种机制。第一种机制是通过错误代码进行过滤。第二种是按诊断消息文本的内容进行过滤。第三是按文件路径过滤。让我们来看一个使用过滤系统的示例。
假设您确定代码为V112的诊断消息(使用幻数)绝不是应用程序中的真正错误。在这种情况下,您可以在分析仪的设置中关闭以下诊断警告的显示:
之后,代码为V112的所有诊断警告将从错误列表中消失。请注意,您不需要重新启动分析仪。如果再次打开这些消息,它们将出现在列表中,而无需重新启动分析。
现在,让我们看看另一个基于选项文本的诊断消息过滤。让我们看一下分析器警告的示例以及发布该警告的代码:
Obj.specialFunc(obj);
分析器警告:V678对象用作其自身方法的参数。考虑检查“ specialFunc”函数的第一个实际参数。
解析器发现将同一对象作为参数传递给调用此方法的参数令人怀疑。与分析器相比,程序员可能知道使用此方法是可以接受的。因此,您可能需要过滤掉所有此类警告。您可以通过在“关键字邮件过滤器”设置中添加相关过滤器来实现。
之后,所有文本包含表达式的诊断消息将从错误列表中消失,而无需重新启动代码分析器。您可以通过从过滤器中删除表达式来打开表达式。
减少诊断消息数量的最后一种机制是通过项目文件名和文件路径的掩码进行过滤。
假设您的项目使用Boost库。分析仪肯定会通知您该库中的潜在问题。但是,如果您确定这些消息与您的项目无关,则可以在“不检查文件”页面上添加Boost文件夹的路径:
之后,d
与该文件夹中文件有关的诊断消息将不会显示。
另外,PVS-Studio还具有“标记为错误警报”的功能。 它使您能够在源代码中标记这些行,从而导致分析仪生成错误警报。 标记代码后,分析仪不会对此代码生成诊断警告。 验证新编写的代码时,此功能允许在软件开发期间永久使用分析仪。
因此,在下面的示例中,我们使用代码V640关闭诊断消息:
对于(int i = 0; i<m; ++ i)
对于(int j = 0; j<n; ++ j)
矩阵[i] [j] =平方(i)+ 2 *平方(j);
Cout <<“矩阵初始化。” << endl; //-V640
嗯...