Share via


VS2015 Update 1 的/DEBUG:FASTLINK选项介绍

[原文发表地址] /Debug:FASTLINK for VS2015 Update 1

[原文发表时间] 2015/10/16 8:02 AM

从Visual Studio 2015 Update 1 CTP 开始,我们对/DEBUG:FASTLINK做了一些改变。/DEBUG:FASTLINK旨在改善 Visual Studio的增量开发循环的链接时间,为中等至大型工程提供了2倍的增速。目前,链接器会参与到PDB的生成过程,合并类型信息,修改私有标识符的类型索引,生成全局符号是PDB生成的主要时间组成部分。使用/DEBUG:FASTLINK链接器生成的PDB不会包含任何私有标识符,调试信息被分配到输入对象和库文件中,PDB仅仅用来作为一个索引数据库。DIA APIs已被修改,以允许Visual Studio 调试器提供一个无缝的调试(仅)体验,并且,通过使用这个选项可以提供更快的链接时间且对整体调试体验没有或有很小的影响。这会让使用Visual Studio进行开发的人员感觉非常好。今天,对于Universal工程模板,/DEBUG:FASTLINK已作为链接器->调试属性的默认值(仅Debug配置,如下图 )。

当在不同的机器上用生成的PDB和PE调试时,或换句话说,当你想共享PDB和PE给你们团队的同事时,你可能会遇到以下错误信息。

正如上面提到的,这是因为当指定了/DEBUG:FASTLINK后,链接器生成的只是部分PDB。基于我们收到的反馈信息,我们正试图改进这个错误信息。新的错误信息将更加详细,如包括哪个二进制文件,哪个OBJ文件,哪个OBJ属于哪个静态LIB,哪个编译器生成的PDB文件是缺失的。

针对调试使用共享PDB的情形,现有的方法是设置链接器->调试属性页的“生成完整程序数据库文件”选项,在共享之前生成完整的PDB(如下图)。指定此选项为“是”后,将会执行一个最小化生成,这将再次链接并用完整的PDB覆盖部分PDB,未来,替代重新链接,一个新的工具将会被触发,收集并执行所有输入OBJs,静态LIBs,编译器生成的PDBs中的调试记录,然后覆盖链接器指定/DEBUG:FASTLINK后生成的部分PDB。这将比重新链接快很多,并且,生成的PDB会包含二进制文件需要的所有相关调试信息,这就好像是指定了/DEBUG链接一样。另外,在未来的更新中,我们将会支持具体指定对象文件的路径,但目前发布的版本是不支持的。

为了获得更快的链接时间,接下来计划将/DEBUG:FASTLINK指定为所有工程模板的默认选项,因此在实施之前,我们希望得到你的反馈信息。