用Visual Studio 2017 RC 打开任何C++ 源代码文件夹

[原文发表地址] Open any folder with C++ sources in Visual Studio 2017 RC [原文发表时间] 11/16/2016   随着Visual Studio 2017RC 的发布,我们一直在改进c++源代码中的“打开文件夹”功能。在这次发布的产品中,对于调试器和C++语言服务,我们增加了生成以及更简单配置的支持。 如果你刚刚开始使用“打开文件夹”或者想要更深入的了解这些功能, 可以去C++入门介绍的打开文件功能,在那里已经更新了下面的内容。如果你目前在使用CMake, 可以去看我们的博客介绍Visual Studio的CMake支持。 以下是对Visual Studio 2017的最新RC版本中的“打开文件夹”功能的改进: 读写C++代码 生成C++程序 调试C++二进制文件   阅读并编辑C++代码 环境变量和宏支持。有利于配置C++智能感知和浏览的CppProperties.json 文件,目前对于指定头文件路径和其他属性值支持环境变量扩展功能。语法是将一个环境变量%FOODIR%扩展到${env.FOODIR}。 注意:%WindowsSdkDir% 和%VCToolsInstallDir%未设置为全局环境变量,所以确保从VS2017开发人员命令提示符启动devenv.exe,因为它定义了这些变量。   在此文件内,你还可以访问到内置宏:   ${workspaceRoot}—提供工作区文件夹的完整路径 ${projectRoot}–CppProperties.json放置的文件夹的完整路 ${vsInstallDir}—安装VS2017正在运行实例的文件夹的完整路径   CppProperties.json 智能感知。当你安装了完整的JSON编辑器(它附带有网页开发工作负载),可以通过JSON智能感知在编辑CppProperties.json文件时得到帮助。 C++配置下拉列表。你可以在CppProperties.json文件里创建尽可能多的配置,同时可以从标准工具栏的C++配置下拉列表里轻松的切换这些配置。 CppProperties.json CppProperties.json现在是可选的和默认的。当你打开一个C++源代码文件夹,VS会创建2个默认的配置:调试和发布。这些配置是和我们在VS2015中介绍的单个文件智能感知配置是一致的。   生成C++工程 通过一系列任务集成外部工具。现在你可以对当前工作区中的文件自动构建脚本或者其他任何外部的操作,在IDE里直接作为任务来运行它们。你可以在一个文件上右键单击选择“自定义任务设置” 来配置一个新的任务。 这个操作会在你的工作区中隐藏的.vs文件夹里创建一个新的tasks.json文件和一个新的任务。JSON智能感知是可用的如果你已经安装了JSON编辑器( 它附带有网页开发工作负载)。 默认情况下,可以从解决方案资源管理器中文件的上下文菜单执行任务。对于每一个任务,在上下文菜单的底部你会发现一个新的条目。 Tasks.vs.json…

0

Visual Studio 2015 Update3 的C++ 编辑并继续

[原文发表地址] C++ Edit and Continue in Visual Studio 2015 Update 3 [原文发表时间] 2016/7/1 我们一直在改进C++的编辑并继续(EnC)功能 自从我们在Visual Studio 2015 发布它之后,EnC使用默认的调试引擎和VC140工具包。我们已经处理了相当多的客户反馈,同时在此基础上,我会在这篇博客中介绍 Update3(下载)和其它有关C++ EnC的最新进展。 快速回顾一下——编辑并继续允许您在调试的时候修改您的代码(举个例子,如果在运行的时候你在代码里发现了一个bug),调试器可以在调试的进程中应用代码的更改,并可以继续使用您的新代码进行调试!这可以帮助加快您的编辑->生成->部署->调试周期。您可以在我们之前的博客里找到更多的信息,同时在这里也有介绍如何使用C++的编辑并继续。 我们在Update3的修复 在静态库中旧代码(错误信息)的EnC: 在静态库中对源文件进行编辑会导致源信息的不匹配以及旧代码会有一个误导的“成功应用代码改变”的消息。目前这个问题已被修复,现在任何旧代码在任何情况下都应该包含一个关于为什么我们不能映射指令指针的警告说明。 在一些比较大的项目中,EnC崩溃/卡住时带有链接/DEBUG:FASTLINK调试信息: 自从链接开关FASTLINK泄露某些信息在obj文件中,而不是整合所有的信息到PDB中后,在运行大程序的时候VS会遇到和EnC有关的内存问题,目前已经解决了这个问题。 C1092错误/C4656警告:我们已经修复了很多臭名昭著的有关于“严重错误 C1092:编辑并继续不支持对数据类型的修改;需要重新生成”的不相关更改的错误。同时,如果你使用/WX(把所有的警告都视为错误)生成,编译器在EnC的时候这些会导致编译错误的误报,也不会发出“警告C4656:…数据类型是新的或已从最新的版本上更改,或者在其他地方被定义的不同” 在EnC上提高“应用代码更改…”的性能:我们已经减少了应用代码更改的时间(即:当你看到“应用代码更改…”的对话框时),并且让它快了3倍。 Update3的断点改变 允许预编译(只在本地):调试选项调试->选项->常规->允许预编译(只在本地)不再支持Visual Studio Update3和默认调试器。对边际性能的改进是之前的设置,没有功能上的影响。 快速EnC参考 C++编辑并继续的需求 生成设置(程序属性) C/C++->常规->调试信息格式:编辑并继续程序数据库(/ZI) C/C++->代码生成->启用最小重新生成:是的(/Gm) 链接器->常规->启用增量连接:是的(/增长的) 任何不兼容的链接器设置(例如/SAFESEH, 或者 /OPT:…)在生成时的都应该导致LNK4075警告(举个例子,由于‘/OPT:ICF’规范而忽略‘/EDITANDCONTINUE’) 调试设置(调试->选项->常规) 启用本地调试并继续 在“编辑并继续”中,任何不兼容的编译器或者链接器都会导致一个错误(举个例子,“‘file.cpp’在‘MyApp.dll’中链接的时候并没有启用“编辑并继续”。确保启用了增量链接,而且,//EDITANDCONTINUE指令是不容忽视的。”) 不兼容的设置和不支持的情况 调试器设置(调试->选项->常规): “要求源文件与原始版本完全匹配:在修改方法时,不选此选项会导致在EnC之后不正确的断点绑定,同时,随着更新3应用此选项的更改,会导致错误“‘要求源文件精确匹配原始版本’在调试选项>选项>中的“设置”需要启用编辑并继续。请检查此选项,然后再试一次。”  “允许预编译(仅限本机)“:在Visual Studio 2015中,默认调试器不再支持这个选项。 Windows 8/8.1 应用商城:这些程序使用VC 120的工具包和C…

0

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

VS2015 Update 3 RC版本中编译器的改进

[原文发表地址] Compiler improvements in VS 2015 Update 3 RC [原文发表时间] 2016/6/7 C++编译器团队希望大家感受VS 2015 UPdate3编译器中的各种酷炫。 相比第一个发售版本VS 2015 RTM, 这一版的编译器在兼容C++标准准则上已经取得了重要的进展。 Update 3版本针对以下特性进行了特性增强。 表达式SFINAE(匹配失败不是错误), nested namespaces(嵌套命名空间),generalized range-based for loops(泛型范围循环)。 最后,我们使用了新的编译开关来帮助你针对代码所依赖的C++ ISO标准进行切换。    于此同时, 我们也修复了近200个来自update2 版本中的编译器bug, 当中有许多Bug出自Connect。感谢你们的反馈。 当编译器源代码改变后,编译器将会提供定义明确的诊断信息,我们也会持续文档化每一个修复,并把修复带来的影响记录到这个页面: compiler conformance improvements documentation for VS 2015。  是的, 我们会积极修改bug,即使需要修改源代码.     让我们深入这些新特性吧. 这些修改大部分都是帮助我们的编译器更加兼容已经存在的C++11和C++14标准特性。有些修改甚至更具有意义,这些修改或许就是下一个C++标准特性. ·         Standards versioning: 在Visual studio C++ 2015 up3中,…

0

使用C++ Coroutines技术简化UWP的异步代码

[原文发表地址] Using C++ Coroutines to simplify async UWP code [原文发表时间] 2016/4/4 通用windows平台(UWP)引入了许多异步API,目前已经有近1700个API。每个API之间的切换只需要50毫秒左右即可完成异步模式。 编写异步模式的代码并不是轻松的事情, 尤其在C++中必须创建一个PPL任务并且在lambdas表达式中使用continuation (.then)。 实际上许多情况代码本身并不难写, 只不过阅读性不佳。 C++ Coroutines技术可以简化编写的异步代码, 使代码可读性提高,易于维护编写。 下面我们直接看实例: 这段代码中我们尝试打开图片,使用 PickSingleFileAsync和OpenAsync:   void AsyncDemoForBuild::MainPage::PickImageClick(Platform::Object^ sender,        Windows::UI::Xaml::RoutedEventArgs^ e) {        using namespace Windows::UI::Xaml::Media::Imaging;        using namespace Windows::Storage::Pickers;        using namespace concurrency;          auto picker = ref new FileOpenPicker();        picker->FileTypeFilter->Append(L”.jpg”);        picker->SuggestedStartLocation…

0

微软C/C++编译器中管理字符集的新选项

[原文发表地址] New Options for Managing Character Sets in the Microsoft C/C++ Compiler [原文发表时间] 2016/2/22 微软C/C++编译器在伴随着DOS操作系统, 16位windows操作系统和32/64位windows操作系统发展的同时,也在支持不同着字符集、代码页和编码。这篇文章不仅解释了过去我们的编译器是怎样工作的,而且还包含Visual Studio 2015 Update 2 CTP C/C++编译器中提供的一些新的编译选项开关,明确支持BOM-less UTF-8文件和控制执行字符集,请下载并试用它。关于Update 2中的编译器的其他改变可以查看这篇文章。 有一些非常好的在线资源很详细的描述了Unicode, DBCS, MSCS,代码页和其他相关知识,我不会尝试在这里重现它们,但我们会很快涵盖这些基本概念。The Unicode Consortium是一个学习Unicode编码非常好的网站。 我们主要会通过两个方面来让大家明白我们的编译器是怎样来处理不同的字符集的。第一个方面是如何解释源文件(源字符集)里的字节,第二个方面是它把什么字节写入二进制(执行字符集)。弄明白源代码在磁盘上是怎样编译和存储是非常重要的。 显式标记 Unicode编码 通过BOM(字节序标记)来标记Unicode文件是一种标准方式,BOM不仅能标记UTF-32、UTF-16和UTF-8,也可以判断它是否有高字节序和低字节序。通过BOM来表明字节的序列, 这些结果来自于从编码U+FEFF到任何正在使用的编码。UTF-8是一种字节流编码,所以实际上并没有排序字节需要被标记出来,但是UTF-8的标志通常仍然被叫做“BOM”。 隐式标记 Unicode编码 在支持Unicode之前的Windows(和DOS)操作系统, 其文本文件以没有迹象显示编码形式来存储,它是由应用程序来诠释的。在DOS中,ASCII范围外的任何字符都将被构建成视频卡来输出。在Windows中,这个被称为OEM(437)代码页,它包含一些非英文字符集,以及一些用于绘制文本周围框线的字符集。 Windows最终还是添加了对DBCS (双字节字符集) 和MBCS (多字节字符集) 的支持。至今仍然没有一个标准的方式来表示文本文件的编码是什么,无论系统代码页如何设置字节通常会被解释。当32位的Windows出现时,它为了UTF-16分割APIs或者设置另外的所谓的“ANSI”APIs,这些APIs用8个字节来表示当前文件中的Unicode编码。 注意:通常你是不能在Windows中设置系统代码页为Unicode代码页(或者UTF-16 和UTF-8), 所以在很多情况下,在一个老的应用程序中去来弄明白没有BOM的 Unicode编码,并不是一件容易的事情。 这也是现在常见的在UTF-8中不使用BOM的编码,大部分Linux环境下默认是这样的。虽然很多的Linux工具可以处理BOM, 但大部分工具却不能生成它。实际上没有BOM,很多简单的事情例如连接和追加文件也不用担心谁来写BOM。 怎样用微软C/C++编译器从一个文件中读取文本 在过去的某一时刻,微软编译器内部改用了UTF-8字符集。 所以,从磁盘上读取文件时会转换成UTF-8字符集。如果一个文件中有BOM,我们可以使用并读取指定的任意编码的文件并把它转换到UTF-8。如果一个文件中没有BOM,我们可以尝试通过看前8个字节来删除UTF-16编码中的低字节序和高字节序。如果这个文件看起来像UTF-16, 我们将把它当作一个包含UTF-16字节序标记的文件来处理。 如果没有字节序标记,而且它看起来也不像UTF-16, 那么我们可以用当前的代码页(调用GetACP的结果)来把磁盘上的字节转换成UTF-8。这个是否正确取决于文件中实际的编码是怎样的以及包含什么字符。如果文件中实际包含的是UTF-8编码,它将不能被识别为正确的系统代码页,不能被设置为CP_UTF8。…

0

坚持旧版本的工具集吗?使用Visual Studio 2015而不需要升级你的工具集

[原文发表地址]Stuck on an older toolset version? Move to Visual Studio 2015 without upgrading your toolset [原文发表时间]2016/2/24 你正在使用老版本的Visual Studio开发C++工程吗?如果你避免VS 2015所有新特性的原因被隐藏,阅读:这篇文章可能会有好消息告诉你。 求助!我被困! 有许多理由为什么你可能想在你的日常工作中使用Visual Studio 2015. 仅举几例: 新增C++重构功能和编辑器实验特性 新增诊断工具调试器窗口和错误列表窗口 修改断点,异常窗口和新增PerfTips功能 仅用于VS 2015的扩展,例如C++快速修复或2015生产力工具集 你可以下载VS 2015并立即升级你的项目。然而我们知道,对于某些工程完全升级不是一件简单的事。 你的二进制文件被绑定了一个老版本的CRT,因为维护原因你不能升级? 你的工程依赖于一个老版本的(非一致)语言构造,如果升级到最近的编译器它会遭到破坏? 你正在依赖于一个需要特定版本VC工具集编译的第三方库文件? 你的C++ APIs 正在被其他人使用,因此你被限定使用特定版本的C++编译器和CRT? 如果这些涵盖了你不使用VS 2015的原因,我将告诉你一个小秘密:你可以开始使用Visual Studio 2015而无需改变你的工具集版本(例如,当前的编译器和匹配的目标CRT)。 嗯,Visual Studio支持本地多目标和往返已不再是个秘密。并且我们肯定想要更多的篇幅介绍它。 本地多目标是指最新的IDE有能力使用老版本的Visual Studio(VS2008或向上)安装的工具集生成。 往返是指最新的IDE能够加载由以前版本IDE创建的项目(VS 2010工程或向上)而不需要更改任何项目资产,从而使其能够在以前版本的IDE中再次加载。 使用这些特性意味着你虽能利用最新的VS 2015 IDE特性,但不能使用C++编译器,库和生成工具 (例如,生成吞吐量) 的新特性。免费声明:有一些IDE特性依赖于最新的工具集,因此它们将与老版本的工具集不兼容:例如,在内存分析器中将会缺失类型信息,重构操作“转化为原始字符串直接量”将生成C++11-兼容的代码,从而使其不兼容VS 2012或更老的版本。 再说一遍? 本地重定向如何工作?…

0

VS2015 update 1: 新功能 – MPX

[原文发表地址] Visual Studio 2015 Update 1: New Experimental Feature – MPX [原文发表时间] 2016/1/20 10:00AM 导论: 这篇文章是关于在VS2015中支持Intel®内存保护扩展(Intel® MPX),文章的内容是由Intel公司的Gautham Beeraka, George Kuan,和Juan Rodriguez提供的。 概述: VS2015 update 1 于2015年11月30日发布, 在这个更新版本中包含了对Intel MPX编译和调试功能的支持。Intel MAX能够检查所有指针的读取和写入,以确保它们在已声明的内存范围内。这个技术可以检测缓存区的溢出,并且停止正在运行的程序以避免危及系统。它允许C/C++代码使用第六代 Intel 酷睿处理器(启用MPX的 平台) 中介绍的最新的MPX 指令集和寄存器。 微软Visual C++编译器和链接器现在有通过特定的命令行选项启动自动检测的能力。 这篇博客解释了你该如何使用MPX代码自动生成以及启用MPX调试二进制文件。如果你想了解更多的有关Intel MPX的信息,请查看Intel MPX Technology web page. 如何来启用MPX代码的自动生成功能 VS2015 Update 1 有一个新的编译选项: /d2MPX. /d2MPX当前支持: 检查写入内存时的潜在缓存溢出, 它可以保护本地的和公用的指针和数组。 扩展到函数调用来自动提示指针参数的边界。 在你的工程中启用MPX的代码自动生成功能: 在VS中,如图1所示在添加其他选项框(项目|属性|配置属性|C/C++|命令行|其他选项)中添加/d2MPX编译选项。 图1:添加…

0

Clang with Microsoft CodeGen 2016年1月)发布上线

[原文发表地址]Clang with Microsoft CodeGen (January 2016) released [原文发表时间]2016/1/21 2:34 AM 我们已经发布了一个带外的Clang/C2工具集,它包含了一些社区问题的修复和测试中发现的bugs。这是未来即将快速发布众多版本中的一个,来自用户的一些问题反馈会逐渐处理。这里我们只列出相较于之前版本的新变化, 更多关于Clang/C2工具的详细讨论,请参阅VS2015.1的Microsoft CodeGen in VS 2015 1。 这个更新仍然是基于Clang3.7的一些相关优选的社区问题修复,并且将C2.dll的版本修改为19.023413.0。 Microsoft Fixes 修复原子布尔类型std::atomic_flag,使其生成正确的静态代码. 修复了”Static Library for Universal Windows”模板在目标平台为ARM时,使用Clang/C2工具集的问题。 修复了Clang/C2 和Android MDD同时安装,共享的Clang编译器的目标定义文件被重写的问题。 改变了当从工具集Visual studio 2015(v140)切换到Clang/C2的一些默认参数, 使其更好的兼容新工具集(EH开启异常捕捉模式, PCH预定义头文件默认关闭)。 Community Fixes r254346 [PR25661]根据r254323, 恢复部分一部分r217213。 r254323 [MS Compat]在推演模板参数时,调整了之前的调用机制thiscall, 变为新的调用机制cdecl。 r253843 [MS ABI] 允许调用__RTDynamicCast。 r253523 [MS ABI] 让arbitrary entities加入 vftable的排列 r253013 [Sema]…

0

Visual Studio对安卓CMake 工程的支持

[原文发表地址] Support for Android CMake projects in Visual Studio [原文发表时间] 2015/12/16 3:16 AM CMake 是一个跨平台工程生成工具,它能让共享的C++跨平台代码在其他多种IDE环境和工程中重复利用。 在Visual Studio中,我们做了一些改变,使CMAKE能支持Android工具链。有了这一改变,你只需做最小的改动,就可以将现有的CMAKE工程变成Android目标平台的工程,你可以在Visual Studio打开你的工程,充分感受到我们丰富的Android集成开发环境的好处。 我们已经在努力做微软CMake 开源github资源库,也打算和Kitware合作将这些改变集成在公开的CMake资源库。 但是当下,下面是你们需要做的一些步骤。 前提条件,请在Visual Studio上安装Android MDD包 获取CMake 在Microsoft CMake 资源库的VCMDDSndroid下面。  请点击“Download ZIP”按钮 ,下载离线备份的VCMDDAndroid,并解压。            从https://cmake.org/download/安装CMake3.4.1,这是编译CMake做必须的,推荐Win32 安装器。  在解压缩的文件目录下,运行 cmake –G “Visual Studio 14” ,这个会从根目录下启动CMake ,大概会花15分钟左右。 这样将会使用Visual Studio 2015生成工具,和生成Visual Studio工程。目的是在Visual Studio中编译CMake。              在CMake运行后,在out文件中应该有Visual Studio 工程。 运行 msbuild cmake.sln,这将会编译CMake, 你可以在VS2015…

0