C++ 核心准则检测器目前在一个单独的NuGet包里

[原文发表地址] C++ Core Guidelines Checkers are now in a single NuGet package [原文发表时间] 2016/6/3 这是令人兴奋的一年自从CppCon2015大会宣布以C++核心准则以及检测器作为Bjarne Stroustrup的开幕主题演讲开始。我们已经多次通过NuGet发布了CppCoreCheck分析工具。Clang社区一直跟随着步伐,在Clang-Tidy上更新C++ Core Guidelines checks。并且我们已经在GitHub看到了源源不断的提交有关于指南支持库的实现。 最令人兴奋的是我们从我们的开发者社区看到的反馈和参与的数量。有很多人都给出了建议,反馈,并且给 cppcorecheck@microsoft.com提出bugs. 你们的反馈和贡献对于这项还处于早期阶段的工作是非常有帮助的。谢谢你们! 在发布第一个生命周期检测器的预览版本时,我们把它放在一个单独的DLL里。因为复杂分析,所以lifetime checker要比正常的核心检测器更慢,同时早期的工作意味着会有很多缺陷。把他分离成单独的Dll,这样就可以允许您单独安装范围和类型检测器而不安装生命周期检测器。但是我们了解到你们想要在运行每个检测器的时候直接选择而无需返回到NuGet. 我们目前正在运行实验的检测器,包括lifetime 检测器以及在一个NuGet包里的常规检测器(GSL仍作为一个依赖来安装)。 现在MsBuild脚本允许我们扩展项目设置,所以你们可以在代码分析的时候选择特定的扩展。这意味着你可以在你的程序设置里单独的启用或者禁止任一检测器。你可以在运行debug构建项目的时候选择使用release 检测器,举个例子,为你的release构建开启experimental 检测器。或者你可以创建一个自定义的配置,运行代码分析检测器。   想试试看吗? 只需要在NuGet上安装检测器.( 在第一篇有关于CppCoreCheck的博客上有详细的指导)。如果你有单独的安装ExperimentalCoreCheck包,你应该在常规的CppCoreCheck包里卸载它目前所有的功能。有关详细信息,请参考下面关于安装和卸载NuGet程序包的说明。 新的MSBuild脚本允许你们独立的配置检测器运行。只需要在项目属性对话框中选择“配置属性\代码分析\扩展功能”。在这里,对于那个配置你可以选择你想要运行的检测器。对于每一个配置你可以选择一系列不同的检测器。   卸载(和安装)NuGet程序包 如果你要卸载旧的ExperimentalCppCoreCheck包,你可以在NuGet包控制台这样做。通过右键单击你的项目或者解决方案把管理NuGet包调出来,或者在快速启动框中输入: 点击”已安装“,选择Experimental包。单击右边的”卸载“按钮卸载它。   请注意,在管理包窗口上有个更新显示。如果点击该选项,你可以在同一个窗口中立即更新CppCoreCheck包。   给我们反馈! 一如既往,我们想听听你的想法。实验阶段的检测器仍处于早期阶段,所以我们不期望有关于试验的任何事情上的标准错误报告。但是如果你在发布检测器时遇到问题,或者有任何关于实验规则设计方向的想法,请通过邮件 cppcorecheck@microsoft.com或者用户之声,建议,链接(反馈bugs),甚至可以发送笑脸告诉我们。

0

VS 2015 Update 1新增的C++核心准则检测器

[原文发表地址]  VS 2015 Update 1新增的C++核心准则检测器 [原文发表时间] 2015/12/03 7:57 PM [这篇文章是由Andrew Pardoe和Neil MacIntosh写的] 早在2015 年9月的CppCon 2015上, Neil宣布我们计划发布新的C++代码分析工具,这将执行C++核心准则里的一些规则。(此次谈话的视频:https://www.youtube.com/watch?v=rKlHvAw1z50 和幻灯片:ISOCpp GitHub repo。) 本周早些时候,我们做了这些代码分析工具的第一个系列,作为一个NuGet 包可以被Visual Studio 2015 Update 1的用户免费安装。目前,这个包包括边界和类型规则的检测器。并且,Herb Sutter在全员会议上(视频在https://www.youtube.com/watch?v=hEx5DNLWGgA)表示在将来的代码分析工具里我们将支持生命期规则的检查器。 这个包被命名为“Microsoft.CppCoreCheck”,链接:http://www.nuget.org/packages/Microsoft.CppCoreCheck. 为了启用新的代码分析工具,仅仅需要在你的工程中安装NuGet包。 NuGet包新增了一个额外的MSBuild目标文件,当你开启代码分析时调用。这个目标文件将CppCoreCheck作为PREfast代码分析工具的一个插件。你可以通过工程属性对话框里的代码分析区域的复选框开启代码分析功能。无论你选择什么样的规则集—只要你开启了代码分析功能,CPPCoreCheck规则将总是运行。 为了保证Visual Studio的用户受益于C++核心准则的实施,这些工具是很重要的第一步。请注意这个需要Visual Studio Update 1,以前的版本是不支持的。 这里有个这个工具可以找到什么类型的问题的例子: void main() {     int arr[10];           // BAD, warning 26494 will be fired     int* p = arr;          // BAD,…

0

VS2015中C/C++代码分析

[原文发表地址]:C/C++Code analysis in VS2015 [原文发表时间]:2015/2/24 1:00 PM 来自 Joe Morris & Jim Springfield (MSFT) 本篇博客给出以下2个问题的答案。 VS2015中C/C++代码分析有什么新功能? VS2015CTP6 版本的C/C++代码分析中支持和不支持的功能是什么? 在我们开始之前,让我们在本页中提出一些术语。 代码分析:C/C++代码分析即为/analyze。它有时被称为“静态代码分析”或简称“代码分析”。它们都是同样的意义。 前端和后端编译器:微软的C/C++编译器由两部分组成(一个前端和一个后端)。前端读取源代码、词、语法,做语义分析并发出中间语言。后端读取中间语言并执行代码生成和优化。在这篇文章的其余部分涉及代码分析中的“编译器”术语仅指前端。 现在专业术语已经不会造成障碍,让我们深入探讨在VS2015 的C/C++代码分析中的改变。 什么是VS2015的C/C++代码分析中的新部分? 让我们从没有改变的部分开始。 代码分析在Visual Studio的所有版本中同VS2013中一样仍旧是可用的。 在VS2013和VS2015之间没有添加额外的检查器 改变了两个重点项目: 前端更新:我们在后台执行代码分析。这是一个管道的改变,并且不会影响用户的工作流程。 统一的错误集中器:我们向用户呈现代码分析出问题的窗口。不再另外附加分离的代码分析窗口,而是替换为一个由编译、生成、链接所共享的统一的错误集中器。 前端更新 这更多的是一个管道的改变,并且不会影响用户的工作流程。但是如果您想知道我们为什么做管道改变,请继续阅读。 我们本机的代码分析工具使用一些相同的代码作为编译器。事实上,它创建于相同的资源树,即便它有成千上万的#if,预处理程序块会完成它。代码分析工具通过捕捉碎片与常规编译器解析为整个函数创建一个抽象的语法树(AST)。当然,这种捕获的AST与编译器真正使用的其数据结构具有实质性的不同,通常会导致不一致性。 此外,由于添加新的语言功能,大多数需要被执行两次:一次针对编译器,另一次针对代码分析。这会导致2个不同的代码路径和二进制文件(c1xx.dll和c1xxast.dll),一个用于代码生成和代码分析。 这是我们的一大难点,一年多之前我们开始的一个项目对编译器代码库进行了重大改革。我们期望针对AST以及代码生成和代码分析能够拥有统一的代码路径。因此,我们除掉了c1xxast.dll。 通过这个管道改变,后台的/analyze现在工作如下…当/analyze传递给编译器时,我们使用相同的用于正常编译的DLL(c1.dll和c1xx.dll),同时我们将建立相同的内部数据结构。在/analyze下有一些我们保留时间较长的附加信息,但现在的总体结构是相同的。以前,我们将发出IL(中间语言)供编辑器后端解析函数体,但现在我们将在发出IL之前在内部捕获整个函数体。 这会允许我们使用相同的树进行分析,代码生成以及执行新编译器的功能,例如返回推导类型和“常量表达式”,这需要检查整个功能以及评估编译时间的能力。综合这些,我们期望我们的代码分析能力能够变得更好。 统一的错误集中器 在VS2013中,代码分析窗口是从错误列表窗口中分离出的一个单独的窗口。未分析的相关错误/警告直接进入错误列表窗口,已分析的错误/警告直接进入代码分析窗口。 关于VS2015,我们正在摒弃代码分析窗口,现在所有代码分析的错误/警告如下面的截图所示,将直接进入错误列表窗口。 我们确定所有功能块的功能均存在于代码分析窗口中,并且在新的错误列表窗口中可获得,即以下: 问题的排序 问题的分类 问题的详细信息 问题抑制方法 问题的拷贝并将其黏贴至电子邮件 这里总结了我们对VS2015中代码分析的2个重大改变。当然,您在使用CTP6的时候请注意,我们并没有完成有关前端更新的全部工作。 什么是VS2015CTP6 版本的C/C++代码分析中支持的部分? 到目前为止,/analyze在VS2015 CTP版本的C/C++代码分析中是不可用的。在CTP6中,我们对C代码启用了/analyze。 在CTP6中支持的部分: C分析和大多数代码分析检查 什么是VS2015CTP6…

0