从VisualStudio16.8开始,MSVC代码分析组件正式支持SARIF2.1.0标准。SARIF一项用于展示静态分析结果的工业标准,我们是最早和SARIF技术委员会进行过合作的开发者之一。借助这一技术,SARIF格式的分析日志文件可以在VisualStudio集成开发环境中展示更为丰富的信息,在此之前,使用XML格式来查看日志简直是”弱爆了”。在今天的这篇文章中,我们将展示这些新特性,包括:在错误列表中展示不同的严重级别,以及在错误的代码上显示颜色标记等。
什么是SARIF?
SARIF是“静态分析结果交换格式”的缩写,该格式是用于静态分析工具输出的基于JSON的标准格式。SARIF提供了一种丰富的格式,旨在满足复杂和简单分析工具广泛的需求。它还提供了一种扩展机制,允许工具作者存储SARIF格式不直接支持的自定义数据。
C++代码分析和SARIF
MSVC代码分析一直在使用自定义XML日志格式来报告在代码分析过程中发现的缺陷。尽管这在过去十年中一直为广大开发者提供良好的服务,但我们决定支持SARIF以提供更强大的功能,例如分析文件的日志列表,手动配置项,日志记录位置等。
我们已经在VS中支持SARIF了很长一段时间,甚至是规范的最早草案我们就开始支持了。v16.8是MSVC代码分析组件支持SARIF2.1标准的版本。通过此更新,MSVC代码分析提供开发者更多增强的体验,包括如下:
后台代码分析代码分析颜色标记代码自动修正
为了对代码分析进行更多改进,我们更新了MSVC代码分析以支持最新的SARIF2.1.0标准。同时,已对其进行了更新,以提供将更多信息记录到SARIF日志文件中的选项:已分析文件列表用于代码分析,命令行选项的配置项当发现代码缺陷时采取的处理措施
在更新MSVC代码分析以向SARIF日志文件添加更多信息的同时,我们还为其添加了新功能:除代码分析警告外,还可以记录编译器警告能够记录带有抑制(suppressed)位置的抑制警告
VisualStudio中的处理规则
在更新MSVC代码分析以支持最新的SARIF标准以及有关分析和缺陷的其他信息的同时,我们还更新了VisualStudio以增强代码分析的体验。在以下各节中,让我们看一下VisualStudioIDE中增强的代码分析体验。
规则集和规则动作
MSVC代码分析可以与一个或多个可以启用或禁用选定规则的规则集文件一起使用。分析工具将检查并报告在规则集中启用的规则。MSVC代码分析将忽略在规则集中禁用的规则,并且不会对其进行检查或报告。
可以为规则集文件中的每个规则分配以下“规则操作”值之一:
在我们添加对SARIF的支持之前,MSVC代码分析只能将这些规则操作简单地映射到“启用”或“禁用”状态,并被报告或忽略,直到添加了对SARIF的支持。VisualStudio构建直接使用规则集文件,并且可以将带有“错误”规则动作的规则与已启用规则的重置区分开来,无论规则动作值如何,这些规则都被视为“警告”。VisualStudioIDE不遵守“规则操作”值,而是将所有内容都视为“警告”。
在SARIF的支持下,MSVC代码分析现在将这些规则操作映射到日志文件中SARIF的level属性,如下所示:
在映射到SARIF级别之前,将为“规则动作”值为“默认”的规则分配其他规则动作值之一。
动作中的规则动作
让我们看一下VisualStudio现在如何使用规则集中的RuleAction值来改善代码分析体验。例如,让我们考虑一个具有以下内容的自定义规则集:
对于以下测试代码:
配置为使用上述自定义规则集进行分析时,在VisualStudio中分析测试代码将产生结果,如下图所示:
请注意在“错误列表”窗口中如何列出缺陷,以及在文本编辑器窗口中如何突出显示相应的代码段:在“错误列表”窗口中,C被列为错误,C被列为警告,C和C被列为消息。在文本编辑器窗口中,C的代码段用红色花体突出显示,C用绿色花体突出显示,而C和C用灰色花体突出显示(点)
如上例所示,规则集中的规则操作通过SARIF的level属性映射到VisualStudio构建输出,错误列表和文本编辑器,如下所示:
请注意,在VisualStudio构建输出窗口中,“规则操作”值为“信息”的规则也报告为“警告”。这是采用SARIF日志格式之前的行为。遵循我们的指导原则,即在VisualStudio升级期间尽可能不影响之前的版本,我们将这种行为保持原样,以不更改现有项目的生成行为。
总结
更加丰富的错误提示,让我们写的代码”又快又好”,真-码农福音。
最后
MicrosoftVisualC++团队的博客是我非常喜欢的博客之一,里面有很多关于VisualC++的知识和最新开发进展。大浪淘沙,如果你对VisualC++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《MicrosoftC++CodeAnalysissupportsSARIF2.1》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(TopomelBox)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。我想:你值得拥有。