C++代码分析在Visual Studio 2017 预览版1 上的提高

[原文发表地址] C++代码分析在Visual Studio 2017 预览版1 上的提高

[原文发表时间] 2018/3/13

       我们正在使配置和使用C++代码分析功能以及15.7的一系列更改变得更加容易。在第一个15.7的预览版本里,我们清除了UI,修正了我们的文档链接,更重要的是简化了分析扩展的配置方式。

        如果您不熟悉C++核心检查,它是一个代码分析扩展,可以帮助你更新你的代码使其更加安全,并且可以使用C++ 核心规则里概述的更现代的风格。您可以了解更多的我们在参考页面执行的规则。

默认的C++ 核心检查扩展

        我们希望开发人员能够更容易的利用C++ 核心检查的新的检查。之前如果开发人员想要使用C++ 核心检查,不得不为每个项目启动明确的分析扩展。然后,当运行分析的时候,这将会生成大量的核心检查警告,因为在默认情况下,所有的C++ 核心检查警告都是启用的。

        从预览版1开始,只要运行代码分析,就会启用C++ Core Check扩展。 我们还更新了Microsoft本机推荐规则和Microsoft本机最小规则,以仅包含最具影响力的C++ 核心检查警告(更多内容见下文)。 我们认为这提供了最好的体验:对项目运行代码分析“正常工作”,无需额外配置。

       我们还删除了用于配置分析扩展的UI,因为它不再需要。 我们的目标是使规则集成为代码分析的一站式配置文件。 开发人员需要担心的是他或她想要运行哪些警告,并且引擎会根据规则集智能地启用和禁用扩展和检查程序。 预览1中未完全实现此功能; 剩下的工作将在即将到来的预览中发布。

禁用C ++核心检查项目

        由于此工作仍处于预览状态,因此我们添加了一种方法来恢复之前的行为。 如果C++ 核心检查扩展引起项目问题,可以通过编辑vcxproj文件并添加以下属性来禁用每个项目。

使用msbuild从命令行构建时,也可以通过传递属性 /p来禁用它:EnableCppCoreCheck = false

        如果您发现需要禁用扩展程序,我们想知道您发现的任何阻止问题。使用Visual Studio中的“发送反馈”按钮报告任何问题。

推荐规则集和最小规则集中的新规则

        以前,Microsoft本机推荐和Microsoft最小规则集默认情况下都启用了所有C ++ 核心检查警告。这意味着如果你想尝试C ++核心检查并启用扩展,你会得到大量额外的警告。

        为了与“推荐”和“最低”规则集的精神保持一致,我们浏览了我们的内部项目,并确定了帮助防止最严重错误的C ++核心检查规则。 “推荐”和“最小”规则集仍包含之前的核心分析器规则,现在还包含高影响力的C ++核心检查规则。如果要在启用所有C ++ 核心检查警告的情况下运行,仍然可以选择“C ++ 核心检查规则”规则集。

Microsoft Native最新版本中的新功能

        • C26450 RESULT_OF_ARITHMETIC_OPERATION_PROVABLY_LOSSY
        • C26451RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
        • C26452 SHIFT_COUNT_NEGATIVE_OR_TOO_BIG
        • C26453 LEFTSHIFT_NEGATIVE_SIGNED_NUMBER
        • C26454RESULT_OF_ARITHMETIC_OPERATION_NEGATIVE_UNSIGNED
        • C26495 MEMBER_UNINIT

Microsoft Native推荐的新功能

        • 上面的所有最小规则
        • C26441 NO_UNNAMED_GUARDS
        • C26444 NO_UNNAMED_RAII_OBJECTS
        • C26498 USE_CONSTEXPR_FOR_FUNCTIONCALL

C ++核心检查实验扩展删除

        先前版本的Visual Studio包含一个C ++核心检查(实验)选项,用于未准备好发布的规则。我们已经在几个版本中更新了这些规则,现在处理原始指针,所有者指针和生命周期配置文件的规则在主要检查器中实现。一些实验规则并不完全映射到新规则并且被弃用。

以下实验规则已弃用

        • C26412 DEREF_INVALID_POINTER
        • C26413 DEREF_NULLPTR
        • C26420 ASSIGN_NONOWNER_TO_EXPLICIT_OWNER
        • C26421 ASSIGN_VALID_OWNER
        • C26422 VALID_OWNER_LEAVING_SCOPE
        • C26423 ALLOCATION_NOT_ASSIGNED_TO_OWNER
        • C26424 VALID_ALLOCATION_LEAVING_SCOPE
        • C26425 ASSIGNING_TO_STATIC
        • C26499 NO_LIFETIME_TRACKING

适合并完成

我们还花了一些时间修复一些小错误以改进整体C ++代码分析体验。

        • 单击错误导航到当前文档页面,而不是以前版本的Visual Studio的页面。
        • 从不支持代码度量的项目中,从分析菜单中删除了“运行代码度量标准”。
        • 与15.6版本相比,C++ 核心检查现在运行速度显着加快,内存减少多达50%。
        • 添加了一个热键,用于在当前文件上运行代码分析:默认键盘映射中的Ctrl + Shift + Alt + F7。

总结

        我们很高兴默认拥有C ++核心检查功能,并且为您的项目设置代码分析工具更简单。希望你会发现C ++代码分析工具更易于使用,新的警告也很有用。下载最新的Visual Studio预览并尝试一下。

        一如既往,我们欢迎您的反馈。欢迎通过电子邮件visualcpp@microsoft.comTwitter @visualc或Microsoft Visual Cpp的Facebook发送任何评论。

        如果您在VS 2017中遇到MSVC的其他问题,请通过报告问题选项告诉我们,无论是从安装程序还是Visual Studio IDE本身。对于建议,请通过UserVoice告诉我们。谢谢!