首页

VS2019: 关于链接器的优化  

当你的项目越来越庞大,功能越来越多的同时,也带来了更多的构建时间。最近,VS开发团队向我们透露了有关构建时间优化的一些干货,那么今天我们就来看看,最新版本的Visual Studio 2019中,他们都做了哪些优化措施。 就如本文开头所说的,VS开发团队一直以来都收到来自开发者大量关于构建时间比较长的反馈,道理很容易懂:如果开发者在项目上的构建时间越长,那么他们的很大的一部分时间都是在用于等待构建...

VS Code C/C++ 扩展:2019年7月更新  

近日,VS开发团队隆重宣布:VS Code C/C++扩展2019年7月更新正式发布。这个扩展包含了许多激动人心的新功能,其中包括:语义着色,IntelliSense配置界面增强以及IntelliSense缓存。 对于我们这些热爱C++的人来说,这证明了C++在VS开发团队心目中的地位,确实是一个好消息。那么,我们就来看看这些新的功能。 语义着色 长久以来,语义着色一直是开发者希望VS开发团队增加...

Visual Studio: 关于内联的决策过程  

近日,一位负责MSVC中代码生成功能的工程师Terry发布了一篇博客,讲述了Visual Studio中关于内联决策的内部细节。今天我们就来详细看看。 内联优化概述 首先是一个大背景:开发团队目前正在热火朝天的继续对Visual Studio这个大杀器进行开发演进。VS开发团队内部分工明确,各个项目团队专注在某一个特定的细分功能上。今天文章的焦点在于:在C++代码进行代码生成阶段,如何决策一个函数...

新玩意:使用vcpkg来管理你的C++代码库  

vcpkg的2019.06更新 vcpkg是一个集成在宇宙级开发IDE(Visual Studio)中的一个组件,其主要用于代码库的管理及索引。在2019.06这次更新中,vcpkg现在可以用来在多个不同的平台上来管理C/C++代码库。开发团队为此还专门在github上专门创建了一个仓库:microsoft/vcpkg. 代码库别名:Ports 开发团队使用Ports这个名词来表示各种可用的第三方...

官宣:VS2019 Clang/LLVM对MSbuild工程的支持  

在最新版本的VS2019预览版中,开发团队增加了Clang/LLVM对MSBuild工程的支持。 在稍早一些的时候,也就是今年4月24日的时候,VS开发团队宣布:Clang/LLVM对CMake的支持。就在前两天,也就是7月11日的时候,VS开发团队再次将Clang/LLVM的支持涵盖到了MSBulid类型的工程。 开发团队在其博文中也比较务实:”在大部分情况下,我们推荐我们的用户使用...

QuickInfo在VS2019中的改进:颜色和在线搜索  

2项新改进 Visual Studio系列中的QuickInfo提示,对于开发人员来说,是一项非常方便的特性。简单来说,QuickInfo可以在你编写代码的时候,实时显示当前编写代码的辅助信息,例如函数原型,数据类型等。 在Visual Studio 2019 (v16.1) 预览版3中,这项功能有了新的改进:添加了颜色及在线搜索功能。今天就来简单介绍一下这两个改进。 自定义QuickInfo提示...

小技巧:使用隐藏窗口解除组件间耦合  

问题 随着项目的规模逐渐变得大了起来,解决方案中的组件的个数和相互之间的关系也慢慢复杂起来。如果一个组件A显式调用另一个组件B,则我们认为这个组件A依赖于组件B。如果被依赖的组件B的接口发生变化,则组件A会受到影响,轻则需要重新编译,重则导致新Bug的引入。 改进方法 显式调用的优点在于使用简单,只需要组件的头文件和库文件即可实现组件代码调用,这样也带来了组件之间的强耦合。今天我们引入一种基于隐...

小技巧:使用对象机制实现组件初始化及销毁  

问题 最近在对一份代码进行重构的时候,发现在特殊情况下,组件的销毁接口会因为程序的异常而得不到调用,这个虽然不是什么大问题(整个程序都出现异常了,进程退出是即将发生的事情),但是对于有点完美主义的我来说,这个的的确确的,降低了程序的异常安全性。 解决方法 我们先来看下面一张图,它描述了程序改造之前的交互场景: 在上图中,我们在CWinApp对象的InitInstance中调用了组件的Init接口...

小技巧:使用DebugView进行远程调试输出  

问题 在一次开发过程中,远程机器已经进入了锁屏模式,这个时候如果想得到远程主机上的调试信息就比较困难了。那么,到底有没有办法呢? 解决方法 使用DebugView工具的远程调试输出功能,可以解决上述问题。 具体方法 1) 使用命令行工具(CMD)定位远程主机DebugView所在的目录,然后在命令行下执行:dbgview /a,执行此命令后,DebugView工具会以Agent模式运行。在这个模式...

实战经验:WM_COPYDATA在不同权限进程中的接收问题

问题 在一次开发中,需要使用到WM_COPYDATA方式来实现两个进程之间的数据传输。在网络上可以找到很多关于WM_COPYDATA的示例代码,而且代码结构也比较简单易懂,所以WM_COPYDATA的示例代码不是今天要详细讨论的内容。 今天的问题存在于两个不同权限的进程,例如发送端进程运行在普通用户账户下,而接收端进程则运行在管理员账户下。在这种情况下,发送端发送的WM_COPYDATA消息,将不...