宣布模板智能感知

[原文发表地址] https://blogs.msdn.microsoft.com/vcblog/2018/06/26/template-intellisense/ [原文作者] Nick Uhlenhuth [原文发表时间] 6/26/2018 使用函数模板和类模板的C++开发人员现在可以在模板体中的充分利用智能感知。在Visual Studio 2017 15.8 Preview 3中,当您的插入符号位于模板中时,一个名为“模板栏”的新UI元素会出现在模板定义的旁边,模板栏允许您为智能感知提供示例模板参数。 例如,让我们在algorithm.hpp里面看一下函数模板is_partitioned_until的Boost库 (我对此稍作修改) 。 我们可以使用模板栏为智能感知提供一个 InputIterator类型和UnaryPredicate 类型的示例。 单击<T>图标以展开/折叠模板栏。 单击铅笔图标或双击模板栏以打开编辑窗口。 请注意我们能够在名为myPredicate的UnaryPredicate 上使用decltype 。有了这些信息,我们在编辑模板主体时就拥有了智能感知的全部功能。我们得到了所有恰当的曲线,快速信息,参数帮助等。 我们考虑到模板栏信息是针对特定用户的,因此将它存储在.vs文件夹中,而不是在提交时共享。 下一步是什么呢? 下载最新的Visual Studio 2017 Preview预览版并尝试使用您的项目。要禁用/启用该特性,请转到工具>选项>C/C++>高级>智能感知>启用模板智能感知。 我们将在后续版本中继续改进这个特性。我们已经计划支持嵌套模板并处理Visual Studio外部的编辑。 和所有新特性一样,您的反馈对于指导我们的发展非常重要。您可以在Twitter上@nickuhlenhuth向我发送您的反馈,或者联系Visual Studio C++团队@visualc或visualcpp@microsoft.com。

0

Visual Studio 2017 15.8 Preview 3中新的实验性代码分析功能

[原文发表地址] https://blogs.msdn.microsoft.com/vcblog/2018/06/26/new-experimental-code-analysis-features-in-visual-studio-2017-15-8-preview-3/ [原文发表时间]2018/06/26 Visual C ++团队一直致力于在Visual Studio中提高我们的代码分析体验。 我们的目标是使这些工具更加实用和自然,并希望无论您是什么样式或项目类型的工作流程,它们都将使您受益。   尝试新功能 在预览版频道 中提供的Visual Studio 2017 15.8 preview 3中,我们介绍了一些新的正在进行的代码分析功能。 在默认情况下,这些功能是关闭的,但您可以在工具>选项>文本编辑器> C ++>实验>代码分析下启用它们。 我们鼓励您对其进行测试,并提供您的任何反馈或意见。   背景分析 启用代码分析功能后,现在就可以在通过打开或保存C ++文件来在后台运行代码分析! 我们的目标是将代码分析警告带入到编辑体验中,以便可以更早地修复错误,而不仅只是在运行时才会发现缺陷。 一旦对文件进行代码分析后,警告将显示在错误列表中,而在编辑器中则会显示为波形。   编辑内警告 与背景分析一起,代码分析警告现在在编辑器中显示为相应源代码下方的绿色波形。 如下图,如果通过更改文件来修复警告,则波形不会的自动刷新。 如果文件已经保存或者重新运行当前文件的分析(Ctrl + Shift + Alt + F7),则形形和错误列表会被更新。通过提供给您在同一位置进行代码编写和编辑的功能,我们希望这些视觉提示器能对您有帮助。   错误列表 代码分析警告将会一直显示在错误列表中,对此我们也在试图改善这种体验。 错误列表中的过滤应该更快。 我们鼓励使用“当前文档”过滤器去查看正在编辑的文件的错误, 这是与背景分析功能互相配合的。 警告详细信息也会在错误列表中以内联方式显示,而不是在单独的弹出窗口中显示。 我们相信错误附近的细节可以更容易地挖掘警告。 新的错误列表体验仍在进行中,因此请告知我们应该考虑的任何“必备”功能。   未来展望 我们很高兴能够展示未来会发生什么,但是在现在您可能会遇到一些已知问题。 首先,运行后台分析时仅使用“推荐的本机规则”规则集。 然后,并非所有项目类型都支持背景分析。 您可以尝试通过菜单运行代码分析来强制信息刷新。 最后,清除信息的最佳方法是“清理”构建或关闭实验功能。 随着背景分析运行的改进,突出显示多线警告、改变曲线以显示警告何时过时、自动修复等在以后都会进行考虑。…

0

在Visual Studio中宣布C ++仅在我的代码中单步执行

[原文发表地址]:Announcing C++ Just My Code Stepping in Visual Studio [原文发表时间]:2018年6月26日 [作者]:Marian Luparu [MSFT] 在Visual Studio 2017发行版15.8预览版3中,我们宣布在C ++中支持逐步执行我的代码。 除了以前支持的回调过滤之外,Visual Studio调试器现在还支持单步执行非用户代码。 当您“进入”时,例如在带有自定义谓词的标准库中的算法或具有用户回调的Win32 API,调试器将方便地进入您提供的谓词或回调 ,而不是使用的库代码。 最终将调用你的代码。 去年在CppCon 2017上宣布的在std :: function调用中的调试改进得到了非常热烈的接受后,该团队一直在为这个调试挑战开发通用解决方案,不需要在库代码中进行任何注释。 15.8预览3今天可以获得此支持,我们期待您的反馈。 如何启用逐步执行我的代码(JMC) 您的程序使用新的MSVC编译器开关编译:/ JMC。 默认情况下,JMC在所有调试配置中都是MSBuild项目,因此请确保在15.8 Preview 3或更高版本的最新MSVC编译器重新编译项目。 调试器加载包含用户代码的二进制文件的PDB。 在工具>选项>调试>常规>启用我的代码(默认设置)中启用了JMC。 新的“单步执行”行为 启用JMC后,调试器将跟踪哪些代码是用户代码或系统/库代码。 当进入具有PDB信息的函数时,执行将继续进行,直到到达另一个标记为用户代码的函数或当前函数完成其执行。 这在实践中意味着,为了获得你的代码,你不必花时间逐行执行你不感兴趣的无数行库代码,更常见的是,你可以停止在你的代码库中遍布大量断点。 例如,在下面的代码片段中,如果没有JMC,如果您有足够的雄心壮志“单步执行”,直到您到达作为参数传递给标准库算法的谓词,您将必须按F11(单步执行)140次! 使用JMC,它只是一个“单步执行”命令调用。 STL算法 另一个例子是进入Win32 API回调。 如果没有JMC,调试器无法判断某些用户代码最终会执行,因此它会完全跳过Win32 API调用而不会进入用户定义的回调。 JMC正确地将回调标识为用户代码并适当地停止调试器。 Win32 API回调 单步执行到特定处 要明确地进入可能是非用户代码的调用,您可以利用编辑器上下文菜单中提供的”单步执行到特定处”命令。 这允许您选择要进入的特定功能(用户代码与否): 为其他第三方库配置仅我的代码 C…

0

Visual Studio中共享的PCH使用示例

[原文发表地址] Shared PCH usage sample in Visual Studio [原文作者] EricMittelette [原文发表时间] 2017/7/5 这篇文章由Olga Arkhipova和Xiang Fan撰写. 通常,Visual Studio解决方案中的多个项目使用相同(或非常相似)的预编译头. 由于pch文件通常很大并且构建它们需要花费大量时间,这就导致了一个共性的问题:几个项目是否可以使用相同的且被构建一次的pch文件? 答案是肯定的,但它需要一些技巧来满足cl的检查,用于构建pch的命令行与使用此pch构建源文件的命令行相同。 这是一个示例解决方案,它有3个项目 – 一个(SharedPCH)正在构建pch和静态库,另外两个(ConsoleApplication 1和2)正在使用它。您可以在我们的VCSamples GitHub存储库中找到示例代码源。 当ConsoleApplication项目引用SharedPCH项目时,构建将自动链接SharedPCH的静态库,但是也需要改变几个项目属性。 C / C ++附加包含目录 (/ I)应包含共享的stdafx.h目录 C / C ++预编译头文件输出文件(/ Fp)应设置为共享pch文件(由SharedPCH项目生成) 如果您的项目使用/ Zi或/ ZI编译(请参阅最后有关这些开关的更多信息),使用共享pch的项目需要将共享pch项目生成的.pdb和.idb文件复制到其特定位置以便 最终的pdb文件包含pch符号。 由于这些属性需要针对所有项目进行类似的更改,我创建了SharedPCH.props和CustomBuildStep.props文件,并使用Property Manager工具窗口将它们导入到我的项目中。 SharedPch.props帮助#1和#2,并在所有项目中导入。CustomBuildStep.props帮助#3并导入到 重要的pch项目,但不导入生产项目。如果您的项目使用/ Z7,则不需要CustomBuildStep.props。 在SharedPch.props中,我为共享的pch,pdb和idb文件位置定义了属性:   我们希望将所有构建输出都放在一个根文件夹下,与源分开,因此我重新定义了输出和中间目录。这对于使用共享pch不是必需的,因为它只是使实验更容易,因为如果出现问题可以删除一个文件夹。 调整后的C / C ++’附加包含目录’ 和’预编译头文件输出文件’属性 : 在CustomBuildStep.props中,我定义了自定义构建步骤,以便在ClCompile目标之前运行,并复制共享的pch .pdb和.idb文件(如果它们比项目的.pdb和.idb文件更新)。请注意,我们在这里讨论的是编译器中间pdb文件,而不是链接器生成的最终文件。 如果项目中的所有文件都使用了一个pch,那就是我们需要做的全部,因为当pch被更改时,所有其他文件也需要重新编译,所以在构建结束时我们将拥有完整的pdb和idb文件。…

0

宏转换为Contexpr

[原文发表地址]Convert Macros to Constexpr [原文发表作者]Augustin Popa Visual studio 2017 15.8 版本已经在预览阶段可以下载使用了。 今天,Preview 3 的版本已经发布了, 这个版本里我们做了很多功能的提升,来提高开发人员开发体验。 15.8 里面其中一个红药的主题就是代码现在化, 宏是这里面的关键角色。 在15.8 Preview 1, 我们已经可以展开宏的快速信息提示文本,现在,在Preview 3, 我们很高兴的宣布VS可以将他们转化为现代C++ contexpr表达式,并提供可相应的选项来完成这个转换, 这个方式可以帮你清理你的代码,使你的代码更加现代化。这个功能(和通用编辑器其他功能一样) 是可以配置,也可以根据自身的需求打开或者关闭。 Macro 转为常量的快速修改 当你在编辑器里查看你的代码的时候,你可能会注意到一些”…” 在#define 指令中,某些宏的下面。这些“…” 被称为建议,是另外一种关于错误的单独的分类(红色的曲线;对大多数代码问题), 和警告(绿色的曲线,一些简单的代码问题)。一个“建议”是涵盖一些低风险的代码问题。 当选中这个选项, 一个预览窗口将会出现,展示你将要所做的修改: 一旦这个修改被应用, 代码编辑器里就会出现转换为常量的表达式: 这个功能对常量有用,对一些基本的表达式,像宏一样的方法也可以应用: 你可能会注意到,上面代码里面的“Max” 下面没有’”…”, 对于像宏一样的方法, 我们还没有充分全面的预处理来保证这个转换是可以成功,这是为了保证VS的集成开发环境的稳定性能。 因为我们只想对那些我们认为的合理转换 去显示”建议“的提示。 虽然我们不会显示”…“指示器,然而,你还是可以能够从灯泡菜单项里找到转换的选项, 但你在预览窗口里面选择应用改变的时候然后我们才会在充分处理宏的转换。 这样, 宏就会被转换为下面的模板: 通常,你是可以选择自己将宏转为contexpr, 但是当你看不到”…”时也不要期待它一直起作用。不是所有的宏都是可以转化为contexpr的, 因为宏的范围很宽泛, 很多宏和contexpr或者contexpr表达式是无关的。 工具>选项 配置…

0

通过vcpkg和最新的MSVC编译器来使用Boost.Hana

[原文发表地址] https://blogs.msdn.microsoft.com/vcblog/2018/06/04/use-boost-hana-via-vcpkg-with-the-latest-msvc-compiler/ [原文作者] Bat-Ulzii Luvsanbat [原文发表时间] 6/4/2018 概述 一如既往,我们依旧致力于改善MSVC编译器一致性的工作,我们希望启用更多的C ++库,并且今天我们把Boost.Hana引入了Visual C ++。 基于我们最近的C ++一致性进展,我们在vcpkg版本中应用了一些代码变通方案后,客户现在可以在VS2017 15.7 update中使用Boost.Hana了。 我们要感谢Boost.Hana的作者Louis Dionne与我们一起做出的努力和额外的支持。 怎么获取它? 访问GitHub上的 vcpkg并阅读README.md中的介绍 我们创建了一个新的Hana分支并将vcpkg指向了它 在你构建vcpkg后,执行下面的命令来安装Hana: vcpkg.exe install boost-hana 在Windows上安装Boost的期间,您将看到此免责声明:“当前的MSVC版本无法编译Boost hana。 请使用来自boost 1.67的分支,它上面有替代的变通方案。“ 背景 也许你已经看到了我们发布了一个关于最近的VS2017 update 的博客:C++一致性实施。截至2018年6月初,MSVC还一直因为一些bug而不能构建Boost.Hana的master分支。但我们在两年前就已经开始了这项工作,并且已修复了大约40个来自Boost.Hana的编译器bug。我们在constexpr中遇到了一些阻塞问题,因此我们暂时停止了这项工作,直到最近VS2017 15.7发布,我们在C ++ 14和C ++ 17 constexpr的一致性方面取得了足够的进展。 最近我们重新审视了这个工作的状态,大部分的constexpr阻塞问题已经在VS2017 15.7 update上修复了。然而编译器中的多个功能区域仍然存在未解决的问题,导致我们无法构建Boost.Hana。 虽然编译器仍有工作要做,但由于我们客户对此库的需求很大,所以我们在Boost.Hana中为剩余的编译器bug做了代码上的变通方案。 这是有必要的,因此我们可以对所有已知问题进行完整的测试。 我们现在已经将Boost.Hana的构建加入到了我们的日常测试中,以此来保证我们在开发编译器时没有引出回归问题,同时我们逐步实现与公共资源库的一对一奇偶校验。 在与Louis讨论这个问题后,我们一致同意在vcpkg中提供一个新的Boost.Hana版本来促进更多的Visual C ++社区用户使用该库。 新版本中包含我们之前确定的补丁,并且当我们修复剩余的bug时,我们将逐步更新vcpkg中的Boost.Hana版本,最终在bug修复后我们将删除它并将其替换为master。现在我想我们已经非常接近这个目标了,我们可以在vcpkg中包含当前的这些进展, 而不会影响依赖此库的新用户。 再次感谢Louis愿意接受关于Hana bug的报告并迅速解决它们,这大大加快了我们的进展。 代码变通方案 MSVC特定的代码变通方案有70处:…

0

Visual Studio中的CMake支持 – 配置模板

[原文发表地址] CMake Support in Visual Studio – Configuration Templates [原文发表时间] 2018/06/27 Visual Studio 2017 15.8预览版3现已推出,它包含对CMake工具的一些改进。除了一些修复,我们还通过添加配置模板的方法简化了CMakeSettings.json配置文件。 如果你是Visual Studio中的CMake新成员,请查看如何开始使用。 CMake的配置模板 如果之前你曾创建过一个CMakeSettings.json文件来自定义项目的设置,那么你可能知道该文件可能有点令人畏惧。Desktop和Linux工作负载都安装后,默认的CMakeSettings.json文件超过100行。我们从社区收到反馈意见,该文件难以解压缩和理解,因此我们简化了填充默认CMakeSettings.json文件的方式。我们还提供了一种直接通过配置选择器访问和编辑此配置文件的方法。 开始 当你第一次打开CMake文件夹时,我们现在会默认创建一个与当前操作系统匹配的调试配置。这样,你仍然可以启动并运行以定位本地计算机,而无需创建CMakeSettings.json文件。但是,一旦你想要添加或自定义CMake配置列表,就可以比以往更轻松地执行此操作: 单击配置选择下拉列表(F5按钮右侧)中的“管理配置…”将要求你选择你希望调试项目的模板。 Visual Studio会将所选模板添加到在根CMakeLists文件的文件夹中新创建的CMakeSettings.json中。 这包含我们之前支持的所有配置以及添加了一些用于定位MinGW和ARM IoT设备的新配置。一旦你选择模板后,它将会添加到你的CMakeSettings.json文件中。例如我们以“x86-Debug”为例,我们看到它会产生一个非常简短紧凑的CMakeSettings.json文件: 只有17行,这比过去的文件更易于管理。 添加新配置 一旦你创建此文件后,再次点击“管理配置…”按钮将返回CMakeSettings.json文件。但是,这并不意味着你无法向其添加更多模板。想要在创建文件后添加新模板,只需右键单击编辑器上的任意位置,然后选择添加配置: 或者,你可以在解决方案资源管理器中右键单击CMakeSettings.json文件: 新选择的模板将被添加到配置文件的末尾。 自定义配置模板(实验) 除了内置的配置模板,我们还为你添加了一种实验方法来创建自己的模板。在工具>选项> CMake下,现在有一个“CMakeSettings.json模板目录”条目: 你可以将此指向包含一个或多个包含CMake自定义模板的JSON文件的目录。这些文件可以具有任何名称,并且基本上具有与标准CMakeSettings.json文件相同的格式。 “配置”数组将被视为模板,并将显示在模板选择器中。要在模板扇区中设置其描述,只需在配置的JSON中添加“描述”字段即可。 我们很想知道你如何使用它,以及它是否适合你。你的反馈将帮助我们在Visual Studio的未来版本中塑造此功能。 社区报告的问题和其他改进 我们在最新的Visual Studio Preview中修复了一些客户报告的问题,包括与我们的IDE与CTest集成相关的几个问题: CMake配置因输出窗口中的堆栈跟踪而失败 CMake + vcpkg问题 测试资源管理器和CTest从不同的目录运行 C ++快速操作成员函数的创建定义返回未知错误 CMake +测试:忽略环境变量 未在15.6中检测到CMake测试 CMake:测试资源管理器不会像CTest那样逃避参数 CMake缓存生成卡在Catch2存储库中 测试资源管理器无法正确解释将WILL_FAIL属性设置为TRUE的CTest测试…

0

MSVC编译器预处理程序迈向标准化

[原文发表地址] MSVC Preprocessor Progress towards Conformance [原文发表时间] 2018/07/06 为什么重写编译器预处理程序   最近我们发布了一篇关于C++标准完成度的一篇博客。 博客中提到, MSVC预处理程序正在进行大改动. 这样做的目的旨在提高编译器的语言标准, 解决一些因框架设计导致修复困难的一些久远的bug, 并提高可用性与诊断性。 除此之外, C++标准在某些预处理行为上并没有指定定义, 而且我们的传统行为与其他主要编译器有所不同。在这种情况下, 我们尽可能亲和当前的体系结构并使交互平台的一些库更加方便的支持MSVC。   如果你使用了一个依赖MSVC预处理程序的非标准传统行为的库, 你大可不用担心兼容性。更新后的预处理程序工作在/experimental:preprocessor开关下, 当完全实现时它将会转为/permissive-模式下一个含有/Zc:的默认开启开关。   我如何去使用   维护传统预处理程序的行为并继续作为编译器的默认行为。 从VS2017 Preview 3 release开启命令提示框, 使用/experimental:preprocessor选项开启标准化的预处理程序。   我们已经介绍了一个新的预定义宏”_MSVC_TRADITIONAL”, 它可以用来标识正在被使用的传统预处理程序。这个宏不需要任何条件, 只依赖于正在使用的预处理程序。 宏返回1代表传统预处理程序, 0代表使用新的标准化的体验版预处理程序.   #if defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible…

0