VS 2015更新1可用的C++核心指南检查器

[本文作者 安德鲁·帕多和尼尔·麦金托什]

null

更新:CppCoreCheck工具现在是VS 2017的一部分: https://blogs.msdn.microsoft.com/vcblog/2016/10/12/cppcorecheck .

九月份的时候 CppCon 2015年 尼尔宣布我们将为C++提供新的代码分析工具,这些工具将在C++核心指南中执行一些规则。以下是演讲视频: https://www.youtube.com/watch?v=rKlHvAw1z50 幻灯片可在 ISOCpp GitHub回购 .)

本周早些时候,我们将第一组代码分析工具作为NuGet软件包免费提供,该软件包可由Visual Studio 2015 Update 1的用户安装 界限 类型 配置文件。 发动机的工具 寿命曲线 在Herb Sutter的全会演讲中演示(在 https://www.youtube.com/watch?v=hEx5DNLWGgA )将在未来版本的代码分析工具中提供。

该包名为“Microsoft.CppCoreCheck”,指向该包的直接链接如下: http://www.nuget.org/packages/Microsoft.CppCoreCheck .

为了启用新的代码分析工具,只需将NuGube包安装到您想在VisualStudio中检查的每个C++项目中。

图片[1]-VS 2015更新1可用的C++核心指南检查器-yiteyi-C++库

图片[2]-VS 2015更新1可用的C++核心指南检查器-yiteyi-C++库

NuGet包添加了一个附加的MSBuild目标文件,当您在项目上启用代码分析时,该文件将被调用。此目标文件将CppCoreCheck作为附加插件添加到 预快速代码分析工具。 通过选中“项目属性”对话框的“代码分析”部分中的复选框,可以启用代码分析。选择什么规则集并不重要–启用代码分析时,CppCoreCheck规则集将始终运行。

图片[3]-VS 2015更新1可用的C++核心指南检查器-yiteyi-C++库 这些工具是确保VisualStudio用户可以从C++核心指南的执行中获益的重要第一步。请注意,它们需要Visual Studio 2015 Update 1,不适用于早期版本。

以下是工具将发现的问题类型的示例:

无效 主() { 内景 arr[10]; //错误,警告26494将被触发 内景 *p=arr; //坏,警告26485将被触发

[[抑制(界限1)]] // 此属性抑制边界规则#1 { 内景 *q=p+1; //坏,警告26481将被解雇 p=q++; //坏,警告26481将被解雇 } }

这里有一些有趣的事情需要注意。首先,让我们看一下来自此代码示例的警告的完整描述:

在安装并激活CppCoreCheck代码分析的情况下编译此代码时,会触发前两个警告。但是第三个警告不会因为属性而触发。开发人员标记此代码块是为了防止CppCoreCheck检测到任何违反边界规则1的行为。他可以标记其他语句以抑制类型规则5,甚至可以通过写入来抑制整个边界配置文件 [[抑制(边界)]] 不包括特定的规则编号。C++核心指南有助于编写更好更安全的代码,但C++最终是为开发者提供了 能力 做正确的事。在规则 或 不应该应用概要文件,直接在代码中抑制它们很容易。

虽然代码分析工具还没有开源,但是在NuGet上发布它们意味着我们可以更新它们来解决您可能发现的任何问题。我们还期待着添加新的配置文件(如寿命)的跳棋,因为他们是在指南中开发的。请随时给我们发邮件 cppcorecheck@microsoft.com 有你的反馈!

包含我们的分析工具的NuGet包安装了一个包含微软实现的指南支持库(GSL)的子包。该软件包也可以在 http://www.nuget.org/packages/Microsoft.Gsl . 如果您想遵循核心指导原则,并将构造的使用替换为 T*+ length 参数对 span<T> 从GSL键入。GSL是开源的,所以如果你想查看库源代码、评论或贡献,请访问 https://github.com/Microsoft/GSL .

最后,C++核心指南是一种开放的、基于社区的努力,并以这种精神。 我们还想借此机会向人们指出边界和类型概要检查的另一种实现。clangtidy开发人员已经在开源clangtidy项目中包含了许多对这些概要文件的检查。你可以在这里找到更多关于CLAN-TIGY和他们的C++核心指南的检查。 http://clang.llvm.org/extra/clang-tidy/ .

我们对所有这些支持执行核心准则的第一步感到非常兴奋。一如既往,我们欢迎您对这些工具和库的优劣进行反馈,以便我们不断改进。请随时告诉我们您的想法 cppcorecheck@microsoft.com !

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0 分享