{"id":7021,"date":"2015-10-16T08:02:00","date_gmt":"2015-10-16T08:02:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2015\/10\/16\/debugfastlink-for-vs2015-update-1\/"},"modified":"2021-10-08T11:46:26","modified_gmt":"2021-10-08T11:46:26","slug":"debugfastlink-for-vs2015-update-1","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/debugfastlink-for-vs2015-update-1\/","title":{"rendered":"\/Debug:FASTLINK for VS2015 Update 1"},"content":{"rendered":"<div>\n<div style=\"text-align: justify\">We have made some changes with respect to <span style=\"color: #0000ff\"><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a><\/span> starting with Visual Studio 2015 Update 1 CTP.&nbsp; <span><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a> <\/span>&nbsp;is aimed at improving link times for the incremental developer loop inside Visual Studio and for medium to large size projects <strong><span style=\"color: #000000\">provides ~2x gains.<\/span><\/strong> The linker is currently involved in the PDB generation process and merging of type information, fixing up private symbol&#8217;s type indexes, and generating global symbols are major time components in PDB generation. With&nbsp;<span><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a> <\/span>the linker produced PDB doesn&#8217;t have any private symbol, and debug information is distributed among input object and library files and the linker generated PDB just serves as an indexing database.&nbsp; DIA APIs have been modified which allows the Visual Studio debugger to provide a seamless experience for debugging (only), and using this option provides much faster link times with little or no impact to overall debugging experience. This experience today&nbsp;will work great as long as you are developing inside Visual Studio.&nbsp; <span><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a><\/span>&nbsp;today is the <span style=\"color: #000000\">default Linker-&gt;Debugging property<\/span> for Universal project templates (Debug Configuration only, Figure below).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/8306.Prop-Debugfastlink.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/8306.Prop-Debugfastlink.png\" alt=\"Image 8306 Prop Debugfastlink\" width=\"816\" height=\"184\" class=\"aligncenter size-full wp-image-29514\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/8306.Prop-Debugfastlink.png 816w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/8306.Prop-Debugfastlink-300x68.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/8306.Prop-Debugfastlink-768x173.png 768w\" sizes=\"(max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/div>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7802.Output-Partial.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7802.Output-Partial.png\" alt=\"Image 7802 Output Partial\" width=\"1030\" height=\"180\" class=\"aligncenter size-full wp-image-29513\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7802.Output-Partial.png 1030w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7802.Output-Partial-300x52.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7802.Output-Partial-1024x179.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7802.Output-Partial-768x134.png 768w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/a><\/p>\n<div style=\"text-align: justify\">When debugging using the linker PDB and PE on a different machine from where they originated or in other words when you share the PDB and PE with a fellow developer in the team you are likely to see the following error message.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1663.error_.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1663.error_.png\" alt=\"Image 1663 error\" width=\"483\" height=\"194\" class=\"aligncenter size-full wp-image-29511\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1663.error_.png 483w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1663.error_-300x120.png 300w\" sizes=\"(max-width: 483px) 100vw, 483px\" \/><\/a>\n<\/div>\n<div style=\"text-align: justify\">This is due to the fact that the PDB generated by the linker with&nbsp;<span><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a><\/span> is a partial PDB as mentioned above. Based upon the feedback we have received we are in the process of improving this error message. The new error message will&nbsp; provide more details such as which binary, which OBJ file, which OBJ inside which static LIB, or which compiler generated PDB file, is missing.<\/div>\n<div style=\"text-align: justify\">&nbsp;<br \/>&nbsp;In order to be able to debug with this PDB sharing scenario in mind, the current way to fix this is to generate a full PDB before sharing using the <span style=\"color: #000000\"><strong>&lsquo;Generate Full Program Database File&rsquo;<\/strong><\/span> option in the Linker-&gt; Debugging property page&nbsp;(figure below). When this option is set to &#8216;Yes&#8217; on&nbsp;hitting build we will currently&nbsp;perform &nbsp;a minimal build which will relink and overwrite the partial PDB with the full PDB, in the future&nbsp;however instead of re-linking&nbsp; a new tool will be called which will collect and process debug records from all input OBJs, static LIBs and compiler generated PDBs, and then overwrite the partial PDB produced by the linker with <span><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a><\/span>. This process will be substantially faster than relinking and&nbsp;the resulting PDB will contain all relevant debug info for the binary as if it was linked with \/DEBUG.&nbsp; In addition to this we will be adding support to specify the paths the object files in a future update, but in the current release this is not supported.<\/div>\n<div style=\"text-align: justify\">\n<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1856.Prop-Fix.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1856.Prop-Fix.png\" alt=\"Image 1856 Prop Fix\" width=\"616\" height=\"119\" class=\"aligncenter size-full wp-image-29512\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1856.Prop-Fix.png 616w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/1856.Prop-Fix-300x58.png 300w\" sizes=\"(max-width: 616px) 100vw, 616px\" \/><\/a>\n&nbsp;\n<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7455.Output-Fix.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7455.Output-Fix.png\" alt=\"Image 7455 Output Fix\" width=\"816\" height=\"71\" class=\"aligncenter size-full wp-image-29515\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7455.Output-Fix.png 816w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7455.Output-Fix-300x26.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2015\/10\/7455.Output-Fix-768x67.png 768w\" sizes=\"(max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/div>\n<div style=\"text-align: justify\">Moving forward the plan is to enable&nbsp;<span><a href=\"http:\/\/blogs.msdn.com\/b\/vcblog\/archive\/2014\/11\/12\/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx\">\/DEBUG:FASTLINK<\/a> <\/span> by default for all project templates in the future in hopes of faster link times, so we would love to hear from your feedback on this front before we go on and productize these changes.<\/div>\n<div style=\"text-align: justify\">&nbsp;<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>We have made some changes with respect to \/DEBUG:FASTLINK starting with Visual Studio 2015 Update 1 CTP.&nbsp; \/DEBUG:FASTLINK &nbsp;is aimed at improving link times for the incremental developer loop inside Visual Studio and for medium to large size projects provides ~2x gains. The linker is currently involved in the PDB generation process and merging of [&hellip;]<\/p>\n","protected":false},"author":265,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-7021","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus"],"acf":[],"blog_post_summary":"<p>We have made some changes with respect to \/DEBUG:FASTLINK starting with Visual Studio 2015 Update 1 CTP.&nbsp; \/DEBUG:FASTLINK &nbsp;is aimed at improving link times for the incremental developer loop inside Visual Studio and for medium to large size projects provides ~2x gains. The linker is currently involved in the PDB generation process and merging of [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/7021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/265"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=7021"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/7021\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=7021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=7021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=7021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}