/Debug: fastlink使VS”15”中C++的生成周期更快

[原文发表地址] Faster C++ build cycle in VS “15” with /Debug:fastlink

[原文发表时间] 11/16/2016 Ankit Asthana

Visual Studio “15” 为进一步提高开发人员的开发效率和提高增量生成做了大量的投资。开发者增量式生成就是指一个开发者更改一个或多个源文件并且生成它们。 在生成过程中花费的时间几乎和链、连接二进制文件花费的时间一样。 在Visual Studio 2015中我们引入了一种新的链接器开关‘/debug: fastlink’. 使用‘/debug: fastlink’ 开发者可以看见在清理链接时间上平均提高了2-4倍。

 

用/debug: fastlink链接器生成的PDB没有任何专用符号信息。调试信息分布在输入对象和库文件之间,而链接器PDB只是作为索引数据库。然而这却为开发人员日常生成提供了巨大的性能优势,但是有一种情况需要做不同的处理,而且它是在你想要和团队中的其他的开发人员共享链接器PDB或者想将链接器PDB直接上传到符号服务器上。这将会请求能够从 /debug: fastlink PDB 按需创建一个完整的PDB的工具,在这个版本中我们就正在做这个。开发人员现在可以在解决方案,项目中使用下面显示的新选项从一个 /debug: fastlink PDB生成一个完整的PDB:

 

如果你想从命令行流集成这个。可以用“Microsoft Visual Studio 14.0\VC\bin”路径下的二进制工具“mspdbcmf.exe”。

 

使用/debug: fastlink的另一个问题是它缺乏可发现性,开发者需要使用链接器属性页来发现这个特性。从Visual Studio “15” 开始, /debug: fastlink将作为新项目模板的默认程序数据库文件生成设置。

除了更改程序数据库文件生成的默认设置,在本版本中我们也更改了现有程序数据库生成链接器标志的定义: 在Visual Studio中,将”/debug“映射到”debug“配置的”debug/fastlink“中。

这将允许我们默认迁移现在所有的Visual Studio开发者去使用/debug: fastlink。开发人员可以通过在链接器命令行中添加 “/debug: full”链接器开关或者启用下面属性页中的“Generate Full program Database File”配置来选择退出此行为。

 

我们错过了为此设置统一“Generate Debug Info”和“Generate Full program Database File”的机会,但将在即将发布的版本中将会修改这一点。

 

另一个我们想分享的是,在Visual Studio “15” 中我们正在进一步改进 /debug: fastlink移动名字哈希值从连接时间到DIA(或调试)时间。对于名字查找相关调试操作(例如,通过名称的函数/数据查找在观察窗口中的表达式求值) 所花费的时间有少量的增加, 但是对于非常大的二进制文件 (>50MB) 有明显的增加。下图突出显示了在Visual Studio “15” 的下一次更新中使用/debug: fastlink超过 /Debug 在连接时间上的提高。

总结

一如既往的我们希望看到你的反馈而且我们很愿意学习你在使用这些功能过程中的经验。如果您在尝试 /Debug: fastlink的过程中遇到任何问题或者没有看到连接速度上的提高,请告知我们。如果你想直接联系我们的话,你也可以通过邮件发送你的问题和反馈。请让我们知道你对新功能的建议