夏季不仅是假期,也是工作成果丰硕的时期。 阳光灿烂的日子充满活力,以至于他们有足够的精力进行后期散步和大量的代码提交。 事实证明,PVS-Studio 7.04的第二个夏季发行版相当大,因此我们提请您注意其中的所有新闻稿。
PVS-Studio是用于检测用C,C ++,C#和Java编写的程序的源代码中的错误和潜在漏洞的工具。 它可以在Windows,Linux和macOS上运行。
通过在各种开源项目的
验证过程中发现的大量
错误代码,很好地证明了分析器的功能。
我们提请您注意PVS-Studio 7.04版本中包含的新功能。
搜索具有Copyleft许可证的文件
开发人员只是从那里获取代码而无法完成任务。 复制粘贴代码的流行来源是Stackoverflow网站等。 但是,在某些情况下,程序员可能会从开放源代码项目中获取代码,而不检查许可证要求。 因此,具有Copyleft许可证的开源项目中的几个文件,即 有义务公开所有项目代码。 在拥有大量员工的公司中,这很难保持跟踪,并且由于这种行为,风险和问题可能很严重。 因此,在PVS-Studio中,对于所有受支持的语言(C,C ++,C#,Java),已经出现了有助于查找此类文件的诊断程序。
不同语言的诊断号:
让我们更详细地讨论这些诊断,并分析它们的用途。 分析器将发出警告的注释示例:
对于封闭项目
如果将具有这种许可证的文件(在这种情况下为GPL3)添加到已关闭的项目中,则由于该许可证的性质,需要打开其余的源代码。
由于其能够传播到其他项目文件,这种类型的Copyleft许可证被称为“
病毒 ”许可证。 问题是,在关闭的项目中至少使用一个具有类似许可证的文件会自动打开所有源代码,并迫使您将其与二进制文件一起分发。
诊断程序搜索以下“病毒”许可证:
- AGPL-3.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
有以下选项,当您在一个关闭的项目中发现使用带copyleft许可证的文件时,该怎么办:
- 拒绝在您的项目中使用此代码(库);
- 替换使用的库;
- 打开您的项目。
对于开源项目
我们知道,这种诊断不适用于开源项目。 PVS-Studio团队致力于开发开放项目,帮助修复其中的
错误,并提供免费的许可证
选项 。 但是,我们的产品是B2B解决方案,因此默认情况下启用此诊断。
如果您的代码是根据上述copyleft许可证之一分发的,则可以通过以下方式禁用此诊断(对于C \ C ++为V1042):
- 如果将PVS-Studio插件用于Visual Studio,则转到选项> PVS-Studio>可检测错误> 1.常规分析> V1042,可以在分析仪输出窗口中禁用此诊断的显示。 此方法的缺点是,错误在保存时(或从命令行启动分析时)仍将被写入分析器日志。 因此,在另一台计算机上打开此类日志或将分析结果转换为其他格式时,以这种方式禁用的消息可能会再次出现。
- 如果不使用该插件,则要阻止整个命令的规则或从分析器报告中删除其消息,则可以在配置文件(.pvsconfig)或全局头文件之一中添加注释“ //-V :: 1042”。 对于使用Visual C ++的开发人员,一个不错的选择是将该注释添加到stdafx.h文件中。 此注释告诉分析仪禁用V1042诊断。 有关使用注释禁用诊断的更多信息,请参阅文档 。
- 如果使用Plog Converter实用程序转换报告,则可以使用“ -d”开关关闭诊断。
对于C#,分别表示V3144,对于Java,则表示V6071。
添加到危险许可证列表中
如果您还知道该工具当前未检测到的“病毒”许可证的类型,则可以通过
反馈表向我们介绍这些许可证。 我们将在下一个版本中添加其标识。
新诊断
C,C ++(常规)
- V1040 。 预定义宏名称的拼写可能出现的错字。
- V1041 。 类成员使用悬空引用进行初始化。
- V1042 。 该文件标记有copyleft许可证,这需要您打开派生的源代码。
- V1043 。 标头中声明了一个全局对象变量。 将在所有包含此头文件的翻译单元中创建它的多个副本。
我还要提及诊断
代码V1040 。 即使处于beta状态,她也已经在著名的CMake项目的库中发现了一个有趣的错误:
V1040预定义的宏名称的拼写可能有错字。 “ __MINGW32_”宏类似于“ __MINGW32__”。 winapi.h 4112
#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif
他们在这里以
__MINGW32_的名称
打错了字 。 最后,缺少一个下划线。 如果使用具有该名称的代码进行搜索,则可以确保项目实际使用的版本在两侧均带有两个下划线:
您可以在文章“
CMake:项目的代码质量不可原谅的情况 ”中查看CMake项目中发现的所有错误。
C,C ++(MISRA)
- V2551 。 米斯拉 变量应在使其可见度最小的范围内声明。
- V2552 。 米斯拉 具有枚举基础类型的表达式的值应对应于枚举的枚举器。
- V2553 。 米斯拉 一元减运算符不应应用于无符号类型的表达式。
- V2554 。 米斯拉 包含增量(++)或减量(-)的表达式不应有其他副作用。
- V2555 。 米斯拉 移位表达式不正确。
- V2556 。 米斯拉 当关联的流已经关闭时,使用指向FILE的指针。
- V2557 。 米斯拉 sizeof()运算符的操作数不应有其他副作用。
C#
- V3140 属性访问器使用不同的后备字段。
- V3141 。 “ throw”下的表达式可能为空,这可能导致NullReferenceException。
- V3142 。 检测到无法访问的代码。 可能存在错误。
- V3143 。 “值”参数在属性设置器中重写,此后不再使用。
- V3144 。 该文件标记有copyleft许可证,这需要您打开派生的源代码。
- V3145。 不安全地取消引用WeakReference目标。 在访问“目标”属性之前,该对象可能已被垃圾回收。
同样在C#分析器中,已添加了从get和set属性访问方法以及异步方法计算返回/写入值的功能。
当前,我们正在努力改进将字段值和对象的属性传递给方法时的跟踪,以及跟踪元组的内容。 这些改进将在分析仪的下一个版本中提供。
爪哇
- V6068 可疑使用BigDecimal类。
- V6069 负“字节” /“短”值的无符号右移分配。
- V6070 在对象上进行不安全的同步。
- V6071 该文件标记有copyleft许可证,这需要您打开派生的源代码。
SonarQube 7.9 LTS
期待已久的发布
自上次发布SonarQube 6.7 LTS版本以来,已经过去了将近2年。 从SQ 7.x开始,人们期望新版本具有特殊的热情,当LTS发行时,用户开始积极切换到该版本,这引起了许多问题。 SQ 7.9.1 LTS很快发布了一些小的修复程序,并且第三方插件开发人员也准备了补丁程序。
幸运的是,在PVS-Studio插件中,只有一个小问题与向Java 11的过渡有关,我们很快就解决了这一问题,我们的客户立即切换到了工作版本。
我们还保持了与SonarQube早期版本的兼容性,并且受支持的版本列表现在如下所示:
SonarQube 6.7 LTS和更高版本 。
支持更多语言插件
PVS-Studio插件仅将分析结果转换为SonarQube数据库的格式。 换句话说,它只是将PVS-Studuio分析结果加载到SQ中。 但是,要使SonarScanner实用程序完全运行,必须安装用于编程语言的插件。 我们尚未开始开发已经存在的插件,因此我们仅添加对已经存在的流行插件的支持。 在此版本中,我们增加了与Sonar C社区和SonarCFamily语言插件的兼容性。
支持的语言插件的完整列表如下所示:
要下载PVS-Studio分析结果,从此列表中安装至少一个插件就足够了。 大多数用户只需要安装Sonar C ++社区,SonarC#或SonarJava。 对于更具体的项目,可能需要其他插件。
选择插件时,有必要考虑社区插件与SonarCFamily不兼容的事实。 但是,如果仅使用SonarQube Community Edition,则不会出现此类问题。
新设定页面
以前,您只能通过
sonar-project.properties配置文件配置分析器。 没有关于这种方法的抱怨。 它非常方便,并且可以在99%的情况下使用,但是我们另外在SonarQube服务器上的
管理>配置> PVS-Studio中进行了设置页面,因为 在某些情况下使用也很方便。
设置页面如下所示:
以两种方式设置设置时,将优先考虑
sonar-project.properties文件中指定的
设置 。
IntelliJ IDEA的插件
新的IntelliJ IDEA和PVS-Studio版本的发布日期有所不同,最近有一种情况是IntelliJ IDEA192。*已发布,但尚未安装PVS-Studio插件。 在此版本中,我们添加了对最新版本的IntelliJ IDEA的支持,并且还进行了改进以避免将来出现类似问题。
詹金斯插件
PVS-Studio插件PVS-Studio插件旨在以HTML格式在Jenkins持续集成系统中发布PVS-Studio分析仪的结果。 以前,此插件仅对Windows用户可用,因为 会自动调用报告转换器,并且仅在Windows上才执行。 在PVS-Studio 7.04中,该插件仅支持HTML报告,该报告必须在单独的步骤中生成,但这使该插件可以跨平台。
警告NG插件对于Jenkins,有一个有用的
Warnings Next Generation插件插件,用于查看来自各种工具的分析结果。 最近,我们在其中添加了对PVS-Studio的支持。 使用此插件加载PVS-Studio分析结果的功能已在
6.0.0版中提供,该版本的发布与PVS-Studio 7.04的发布相吻合:
其他改进
PVS-Studio_Cmd特殊的操作模式-凭证已添加到
PVS-Studio_Cmd.exe中 。 此模式允许您创建设置文件并输入许可证信息,而无需使用GUI界面(例如,Visual Studio的插件或实用程序C和C ++编译器监视UI)。 当在构建服务器(可能未描述GUI实用程序),容器中以及与云解决方案集成时使用时,此模式特别重要。
虚幻引擎项目分析在Visual Studio的PVS-Studio插件中,添加了
AutoloadUnrealEngineLog选项,该选项的包含使您可以在通过分析后将分析器报告自动加载到PVS-Studio输出窗口中。 如果没有此选项,则必须通过插件菜单手动完成日志加载。
另外,在文档部分“
测试虚幻引擎项目 ”中,描述了对标准汇编脚本的更改,这些更改将允许在一个动作中进行汇编和分析。 在不修改脚本的情况下(将
-StaticAnalyzer = PVSStudio标志添加到启动参数时),仅对项目进行了分析,而不进行构建。
CLMonitor对于CLMonitor实用程序,已添加了跟踪特定进程的编译器启动的功能。 这样,即使并行构建多个项目,也可以跟踪仅与特定项目相关的编译器的启动。 要在此模式下工作,将使用标志
--parentProcessID%PID% (CLMonitor监视相对于指定子进程的进程)和
--attach (CLMonitor监视相对于当前控制台的子进程的进程)。
pvs-studio-analyzer--ignore-ccache标志已添加到pvs-studio-analyzer实用程序中,该实用程序旨在测试Linux和macOS上的项目:
pvs-studio-analyzer analyze ... --ignore-ccache ...
如果在项目程序集中使用了
ccache实用程序,则PVS-Studio将以增量分析模式运行。 要完全检查项目而不删除
ccache实用程序
缓存 ,请使用此标志。
网站连结
为了跟上我们的新出版物,我们邀请您订阅我们:
- 推特: pvsstudio_rus
- VKontakte: PVS-Studio分析仪
- 脸书: @StaticCodeAnalyzer
- Instagram的: @pvsstudio_rus
- 电报: PVS-Studio rus
- RSS: viva64-blog-en
PVS-Studio:
- 产品页面
- 资料下载
- 该文件
- 客户群

如果您想与说英语的读者分享这篇文章,请使用以下链接:Svyatoslav Razmyslov。
PVS-Studio 7.04版 。