<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Shawn Burke's Blog : Source</title><link>http://blogs.msdn.com/sburke/archive/tags/Source/default.aspx</link><description>Tags: Source</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>How to disable optimizations when debugging Reference Source</title><link>http://blogs.msdn.com/sburke/archive/2008/01/29/how-to-disable-optimizations-when-debugging-reference-source.aspx</link><pubDate>Tue, 29 Jan 2008 22:35:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7311601</guid><dc:creator>sburke</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/sburke/comments/7311601.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sburke/commentrss.aspx?PostID=7311601</wfw:commentRss><description>&lt;p&gt;When you debug code in the .NET Framework using the newly available &lt;a href="http://blogs.msdn.com/sburke/archive/2008/01/17/configuring-visual-studio-to-debug-net-framework-source-code.aspx" target="_blank"&gt;Reference Source functionality in VS 2008&lt;/a&gt;, you may notice that many variables are not available for inspection.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/HowtodisableoptimizationswhendebuggingRe_A306/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="143" alt="image" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/HowtodisableoptimizationswhendebuggingRe_A306/image_thumb.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is because you're debugging against retail-optimized code.&amp;#160; In many cases, since you can still step through, this is something that's manageable.&lt;/p&gt;  &lt;p&gt;But what if you &lt;em&gt;really&lt;/em&gt; need to get a better idea of what's going on?&amp;#160; Fortunately, there is a way.&lt;/p&gt;  &lt;p&gt;What you need to do is to tell the CLR not to load the pre-JIT (aka NGEN) images.&amp;#160; Here is how to do it.&amp;#160; &lt;/p&gt;  &lt;p&gt;First, create a CMD file that sets an environment variable, then launches Visual Studio.&amp;#160; I called mine &amp;quot;NoOptDevEnv.cmd&amp;quot;, and it's contents are as follows:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;set COMPLUS_ZapDisable=1     &lt;br /&gt;cd /d &amp;quot;%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\ide\&amp;quot;      &lt;br /&gt;start devenv.exe      &lt;br /&gt;exit&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I put this cmd file on my desktop.&amp;#160;&amp;#160; When I want to disable optimizations, and only when I want to do this, I launch VS from this command.&amp;#160; &lt;/p&gt;  &lt;p&gt;Once in my Visual Studio project, do the following steps:&lt;/p&gt;  &lt;p&gt;1) Right click on your project file and choose &amp;quot;Properties&amp;quot;&lt;/p&gt;  &lt;p&gt;2) Choose the &amp;quot;Debug&amp;quot; tab and &lt;strong&gt;uncheck&lt;/strong&gt; &amp;quot;Enable the Visual Studio Hosting Process&amp;quot;&lt;/p&gt;  &lt;p&gt;3) Launch your application in the debugger.&lt;/p&gt;  &lt;p&gt;Now, you'll see full local and member variable information:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/HowtodisableoptimizationswhendebuggingRe_A306/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="139" alt="image" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/HowtodisableoptimizationswhendebuggingRe_A306/image_thumb_1.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Finally, you may be asking yourself &amp;quot;What is the Visual Studio Hosting Process (aka VSHost), and what happens if I turn it off?&amp;quot;&amp;#160; And this is a good question.&lt;/p&gt;  &lt;p&gt;For the most part, disabling VSHost won't have any major impacts, but it will disable two features that you may be using.&lt;/p&gt;  &lt;p&gt;First, you will not be able to do &amp;quot;Debug In Zone&amp;quot;, which allows you to debug a process in the context of a security zone such as &amp;quot;Internet&amp;quot; or &amp;quot;Intranet&amp;quot;.&amp;#160; That won't work without VSHost.&lt;/p&gt;  &lt;p&gt;Second, Design Time Expression Evaluation for class libraries will also not work.&amp;#160; What that means, for example, is that if you are developing a Class Library, you won't be able to execute code from it in the Immediate Window while under the debugger.&lt;/p&gt;  &lt;p&gt;In general, I recommend re-enabling VSHost (undo step 2 above) when you are finished with your debugging.&lt;/p&gt;  &lt;p&gt;Hope that helps!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7311601" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sburke/archive/tags/Source/default.aspx">Source</category></item><item><title>Configuring Visual Studio to Debug .NET Framework Source Code</title><link>http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx</link><pubDate>Wed, 16 Jan 2008 17:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7133676</guid><dc:creator>sburke</dc:creator><slash:comments>323</slash:comments><comments>http://blogs.msdn.com/sburke/comments/7133676.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sburke/commentrss.aspx?PostID=7133676</wfw:commentRss><description>&lt;P&gt;It's finally here - the launch of the .NET Reference Source project.&amp;nbsp; This post (hopefully!) contains everything you need to know.&amp;nbsp; Over the past few weeks, we ran a pilot of this feature and collected lots of great data that helped us work through some issues and understand where people were likely to have problems.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First, though, if you have any problems, please make sure you've followed all of the steps exactly as described.&amp;nbsp; If you're still having problems, please check the &lt;A href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx#faq"&gt;FAQ/Troubleshooting&lt;/A&gt; section at the bottom.&amp;nbsp; If that doesn't work, post a comment below and I'll look into it.&lt;/P&gt;
&lt;H4&gt;BASIC SETUP&lt;/H4&gt;
&lt;P&gt;Note this functionality is &lt;STRONG&gt;not&lt;/STRONG&gt; available on the Express versions of the Visual Studio 2008 products.&lt;/P&gt;
&lt;P&gt;1) Install the &lt;A href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10443&amp;amp;wa=wsignin1.0" target=_blank mce_href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10443&amp;amp;wa=wsignin1.0"&gt;Visual Studio 2008 QFE&lt;/A&gt;.&amp;nbsp; This Hotfix just updates a DLL that's part of the Visual Studio debugger that fetches the source files, more details on the download page.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;UPDATE:&lt;/STRONG&gt;&amp;nbsp; If you get an error installing the Hotfix , try inserting your VS 2008 DVD and then running the Hotfix EXE again.&amp;nbsp; We're looking into&amp;nbsp;the root cause&amp;nbsp;- it's related to having a prior version of VS 2008 (e.g. Beta 2) installed on the machine.&amp;nbsp; But this workaround should allow the Hotfix to install properly.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;STRONG&gt;UPDATE (1/18):&lt;/STRONG&gt; There were some problems with the QFE link above that have been addressed, sorry for the inconvenience, it's fixed now.&lt;/P&gt;
&lt;P&gt;2) Start Visual Studio 2008 and bring up Tools &amp;gt; Options &amp;gt; Debugging &amp;gt; General.&amp;nbsp; If you are running under the &lt;STRONG&gt;Visual Basic Profile&lt;/STRONG&gt;, you will need to check the box on the &lt;STRONG&gt;lower left of the Options Dialog &lt;/STRONG&gt;marked "&lt;STRONG&gt;Show All Settings&lt;/STRONG&gt;" before continuing (other profiles won't have this option).&lt;/P&gt;
&lt;P&gt;Set the following two settings:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Turn &lt;STRONG&gt;OFF &lt;/STRONG&gt;the "&lt;STRONG&gt;Enable Just My Code&lt;/STRONG&gt;" setting &lt;/LI&gt;
&lt;LI&gt;Turn &lt;STRONG&gt;ON&lt;/STRONG&gt; the "&lt;STRONG&gt;Enable Source Server Support&lt;/STRONG&gt;" setting &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Your settings should be as below:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_38.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_38.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=439 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_11.png" width=756 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_11.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;3) Next, bring up the "Symbols" Page and set the symbols download URL and a cache location.&amp;nbsp; Specifically, set the three settings below:&lt;/P&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;Set the symbol file location to be: &lt;STRONG&gt;http://referencesource.microsoft.com/symbols&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Set a cache location.&amp;nbsp; Make sure this is a location that your account has read/write access to.&amp;nbsp; A good option for this is to place this path somewhere under your user hive (e.g. c:\users\sburke\symbols) &lt;/LI&gt;
&lt;LI&gt;Enable the "Search the above locations only when symbols are loaded manually" option. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;When you're finished, the settings should look like the image below:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_23.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_23.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=438 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_2.png" width=763 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Setup is done!&amp;nbsp; That's it, really!&lt;/P&gt;
&lt;H4&gt;DEBUGGING INTO FRAMEWORK SOURCE&lt;/H4&gt;
&lt;P&gt;For this simple example, we'll start with a blank C# Windows Application project, but it will work the same with a VB, Web, or WPF project.&amp;nbsp; To walk through this, go ahead and create that project.&lt;/P&gt;
&lt;P&gt;Set a breakpoint in &lt;STRONG&gt;Form_Load&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_10.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=87 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_4.png" width=616 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_4.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now run your project to hit that breakpoint and go to your &lt;STRONG&gt;Call Stack&lt;/STRONG&gt; window (&lt;STRONG&gt;CTRL+ALT+C&lt;/STRONG&gt;).&amp;nbsp; In the Call Stack, right click a frame that starts with &lt;STRONG&gt;System.Windows.Forms.dll&lt;/STRONG&gt;, and choose "&lt;STRONG&gt;Load Symbols&lt;/STRONG&gt;".&amp;nbsp; This will load the symbols for the System.Windows.Forms assembly, which are about 10 megabytes, so the speed of the download will vary according to your connection speed.&amp;nbsp; Note that Visual Studio may be unresponsive during this time.&amp;nbsp;&amp;nbsp; However, this download is a one-time cost for each assembly.&amp;nbsp; The symbols (PDB) file will be cached on your machine, in the directory specified in the steps above.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_12.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=378 alt="Loading Symbols Manually" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_5.png" width=801 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;This will load the symbols for the DLL from the server, and you'll see some information in the status bar to reflect this.&amp;nbsp; Note that when this completes, the call frames will turn black and line numbers will be available.&amp;nbsp; Note you'll need to do the &lt;STRONG&gt;Right Click -&amp;gt; Load Symbols&lt;/STRONG&gt; step each time you launch a debugging session (but, again, the symbols will now be cached locally so they won't have to download).&amp;nbsp; For more information on this, see the ADVANCED USERS section below.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_14.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=124 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_6.png" width=719 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;You have now loaded the symbols for the Windows Forms DLL and can begin viewing the code.&amp;nbsp; You can view code in any way that you normally would in a debugging session.&amp;nbsp; In this case you can either &lt;STRONG&gt;Step In&lt;/STRONG&gt; to the line of code above, or you can&lt;STRONG&gt; double-click one of the frames&lt;/STRONG&gt; in the Call Stack Window.&amp;nbsp;&amp;nbsp; For this case, we'll step in (&lt;STRONG&gt;F11&lt;/STRONG&gt;).&lt;/P&gt;
&lt;P&gt;The first time you step into code, we'll be presented with the EULA for accessing the source code.&amp;nbsp; Please take the time to read this EULA.&amp;nbsp; If you agree to the terms of the EULA, hit ACCEPT, and the source will then be downloaded.&lt;/P&gt;
&lt;P&gt;That's it! You're now debugging .NET Framework Source!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_16.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_16.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=484 alt="Debugging Form.cs in Windows Forms" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_7.png" width=542 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_7.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now, for each assembly that you'd like to debug into just repeat the steps above (note you'll only see the EULA &lt;EM&gt;once&lt;/EM&gt;, not for each file).&lt;/P&gt;
&lt;P&gt;There are times when the Assembly you'd like to debug into isn't on the call stack, for example in the code below:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_18.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=100 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_8.png" width=729 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_8.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Before you step in to &lt;STRONG&gt;Graphics.DrawRectangle&lt;/STRONG&gt;, you need to get the symbols for &lt;STRONG&gt;System.Drawing.Dll&lt;/STRONG&gt; loaded.&amp;nbsp; To do this, we use the &lt;STRONG&gt;Modules Window&lt;/STRONG&gt; (&lt;STRONG&gt;CTRL+ALT+U&lt;/STRONG&gt;).&amp;nbsp; This lists all of the modules (DLLs) loaded by the debuggee.&amp;nbsp; Just find &lt;STRONG&gt;System.Drawing.DLL&lt;/STRONG&gt; in this list, &lt;STRONG&gt;right click&lt;/STRONG&gt;, and choose &lt;STRONG&gt;Load Symbols&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_22.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_22.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=208 alt="Load via Modules Window" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_10.png" width=859 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_10.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Note that once a symbol file is loaded, the path to the symbol file shows up in the "Symbol File" column. &lt;/P&gt;
&lt;P&gt;You can now step into the Graphics.DrawRectangle code above using F11!&amp;nbsp; In this case, note, you'll have to step through the PaintEventArgs.Graphics property code first.&lt;/P&gt;
&lt;H4&gt;ADVANCED USERS&lt;/H4&gt;
&lt;P&gt;Normally, each time you launch a debugging session, Visual Studio attempt to download symbols for each DLL that loads into the debuggee process.&amp;nbsp; As part of this process, it asks each path specified in the Debugging Symbols dialog for the corresponding PDB.&amp;nbsp; Some projects load a LOT of DLLs which won't have symbols available, so this process can significantly impact debugger startup time as this probing occurs.&amp;nbsp; It is mainly for this reason we've recommended manual symbol loading in the steps above; we don't want using this feature to degrade the debugging experience across-the-board.&lt;/P&gt;
&lt;P&gt;There is, however, a way to allow automatic symbol loading (which avoids the "Load Symbols" step) in a way that minimizes performance impact.&amp;nbsp;&amp;nbsp; This is for more advanced users because it requires regular trips back to this Debugging Symbols Dialog.&amp;nbsp; Note you can quickly get to this dialog by choosing the "&lt;STRONG&gt;Symbol Settings...&lt;/STRONG&gt;" item on the right click menus pictured in steps above form the Call Stack or Modules windows.&lt;/P&gt;
&lt;P&gt;The key is to get all of the symbols for a given project type downloaded and cached locally, then turn off the automatic symbol downloads.&amp;nbsp; This will prevent the pings at debugger startup as well.&lt;/P&gt;
&lt;P&gt;To do this, configure your setup as above with the following difference: &lt;STRONG&gt;Uncheck the&lt;/STRONG&gt; "&lt;STRONG&gt;Search from the above locations..."&lt;/STRONG&gt; item on the dialog.&lt;/P&gt;
&lt;P&gt;Now, launch your project in the debugger.&amp;nbsp; This will cause all of the symbols available for the DLLs in your process to be downloaded at on-demand as the DLLs are loaded into the process.&amp;nbsp; Depending on your connection speed, this could take a while (it's generally about 50MB of symbols), so it's a good idea to hit F5 then go do something else for a while.&amp;nbsp; Again, these symbols are cached so this is a one-time cost.&amp;nbsp; Visual Studio will likely be unresponsive during this download process.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_26.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_26.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=437 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_12.png" width=758 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_12.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Once that process has completed, stop the debugger, and UNCHECK the the Reference Source Server symbol location, and hit OK:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_28.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_28.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=442 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_13.png" width=761 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_13.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now when you launch the debugger, symbols will load automatically and you'll be be able to step in and through call stacks normally.&amp;nbsp; Note if you switch to a different project type (that has different assemblies), or have assemblies that are loaded later by your project, you can just repeat these steps to get any assemblies you don't have cached locally).&amp;nbsp; &lt;/P&gt;&lt;A class="" title=faq name=faq&gt;&lt;/A&gt;
&lt;H4&gt;FAQ/TROUBLESHOOTING&lt;/H4&gt;
&lt;H5&gt;1) Which assemblies are currently available for symbol/source loading:&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;Mscorlib.DLL &lt;/LI&gt;
&lt;LI&gt;System.DLL &lt;/LI&gt;
&lt;LI&gt;System.Data.DLL &lt;/LI&gt;
&lt;LI&gt;System.Drawing.DLL &lt;/LI&gt;
&lt;LI&gt;System.Web.DLL &lt;/LI&gt;
&lt;LI&gt;System.Web.Extensions.DLL &lt;/LI&gt;
&lt;LI&gt;System.Windows.Forms.DLL &lt;/LI&gt;
&lt;LI&gt;System.XML.DLL &lt;/LI&gt;
&lt;LI&gt;WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, some others) &lt;/LI&gt;
&lt;LI&gt;Microsoft.VisualBasic.DLL &lt;/LI&gt;&lt;/UL&gt;
&lt;H5&gt;2) When I choose "Load Symbols" I get an Open File dialog asking for the PDB.&lt;/H5&gt;
&lt;P&gt;This can be caused by one of four situations:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You didn't configure the symbol location URL properly from basic setup above.&amp;nbsp; Ensure it's &lt;STRONG&gt;http://referencesource.microsoft.com/symbols&lt;/STRONG&gt;. &lt;/LI&gt;
&lt;LI&gt;You chose a cache symbols directory that your user account doesn't have write permissions for. &lt;/LI&gt;
&lt;LI&gt;You attempted to Load Symbols for a DLL that's not available in the list above &lt;/LI&gt;
&lt;LI&gt;You have a different version of the .NET Framework on your machine - this can happen, for example, if you're running a Windows Server 2008 Beta.&amp;nbsp; To check this, go to the Modules Window in Visual Studio (CTRL+ALT+U) and ensure that the version number of your mscorlib.dll is 2.0.50727.1433, as below.&amp;nbsp; If not, make sure you install the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;amp;displaylang=en"&gt;RTM Version of the .NET Framework 3.5&lt;/A&gt;. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image61.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image61.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=82 alt="" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image61_thumb.png" width=472 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image61_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Check your "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE" (or wherever you installed VS) for a file called &lt;STRONG&gt;symsrv.no&lt;/STRONG&gt;.&amp;nbsp; If that file exists, rename it to &lt;STRONG&gt;symsrv.yes&lt;/STRONG&gt;, and restart Visual Studio.&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;
&lt;H5&gt;3) When I try to open or step into a source code file, I get a dialog that says "Source is not available for this location" or I get an Open File dialog for the file.&lt;/H5&gt;
&lt;P&gt;First, see FAQ item (2) above to ensure the symbols for the DLL were loaded successfully.&amp;nbsp; You can verify this by looking in the Modules Window under the "Symbols Status" column.&lt;/P&gt;
&lt;P&gt;If the Symbols Status is "Symbols loaded.", check the following.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If you have configured &lt;A href="http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx"&gt;Microsoft Symbol Server&lt;/A&gt; in the past, you may have already downloaded symbols for this DLL that don't contain source information.&amp;nbsp; Try specifying a different cache path or deleting your existing cache path, and then repeating the Load Symbols command.&amp;nbsp;&amp;nbsp; See FAQ #4 for more information on this. &lt;/LI&gt;
&lt;LI&gt;Ensure you have checked the "&lt;STRONG&gt;Enable Source Server&lt;/STRONG&gt;" item on the &lt;STRONG&gt;Tools -&amp;gt; Options -&amp;gt; Debugging -&amp;gt; General&lt;/STRONG&gt; page &lt;/LI&gt;
&lt;LI&gt;Ensure that your account has read/write access to your cache path &lt;/LI&gt;
&lt;LI&gt;If you have _NT_SYMBOL_PATH set, it will override these settings.&amp;nbsp; Details &lt;A class="" href="http://codebetter.com/blogs/james.kovacs/archive/2008/01/17/debugging-into-the-net-framework-source.aspx" mce_href="http://codebetter.com/blogs/james.kovacs/archive/2008/01/17/debugging-into-the-net-framework-source.aspx"&gt;here&lt;/A&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;H5&gt;4) I also use &lt;A href="http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx"&gt;Microsoft Symbol Server&lt;/A&gt; to download symbols.&amp;nbsp; What's the difference? Can these two programs co-exist?&lt;/H5&gt;
&lt;P&gt;Microsoft Symbol Server provides symbols without any source information in them.&amp;nbsp; That information has been removed (sometimes referred to as "stripped") before publishing.&amp;nbsp; The symbols provided on the Reference Source Server are full symbols with debugging information.&lt;/P&gt;
&lt;P&gt;The key to using both is to have your Reference Source path above the Symbol Server Path so that those symbols are searched/found first.&amp;nbsp; As described in the ADVANCED USERS section above, you'll likely want to launch your debugger once with this configuration to get all the symbols downloaded, then uncheck both of these paths to avoid debugging launch slowdowns in the future.&amp;nbsp; Also note that this may conflict in the future as more DLLs are added to the Reference Source Project.&amp;nbsp; Meaning, if you've already downloaded the Symbol Server symbol, you'll need to delete that or change your cache path to get the Reference Source one (Visual Studio has no way of knowing which is which).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_32.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_32.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=374 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_15.png" width=644 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_15.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;One final note here, if you have the Microsoft Symbol Server configured via _NT_SYMBOL_PATH, you'll need to add the Reference Source path above to that path as well - _NT_SYMBOL_PATH overrides the above settings.&lt;/P&gt;
&lt;H5&gt;5) Does this work with 64-bit?&lt;/H5&gt;
&lt;P&gt;Yes, we've also provided 64-bit versions of the PDBs.&amp;nbsp; Note some DLLs work on multiple architectures, so not all of them need a separate 64-bit PDB.&lt;/P&gt;
&lt;H5&gt;6) How do I set breakpoints in Framework code?&lt;/H5&gt;
&lt;P&gt;Visual Studio requires the code to exactly match what is expected by the PDB.&amp;nbsp; The source publishing process, however, makes some small updates to the code, such as pushing a standard copyright banner to the end of the source file.&amp;nbsp; This changes the signature (CRC) of the code file.&amp;nbsp; However, it's still easy to set a breakpoint.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Just set your breakpoint as normal (you'll see it fails with a little warning icon), then right click the breakpoint and choose "Location..."&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_34.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_34.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=244 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_16.png" width=807 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_16.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Then check the "Allow Source to be Different" box, hit OK.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_36.png" mce_href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_36.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=233 alt=image src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_17.png" width=598 border=0 mce_src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/ConfiguringVisual.NETFrameworkSourceCode_9B9C/image_thumb_17.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now the breakpoint will set successfully.&lt;/P&gt;
&lt;P&gt;If you find yourself doing this often, you can also disable source matching in general by disabling Tools-&amp;gt;Options-&amp;gt;Debugging: “Require source files to exactly match the original version.” &lt;/P&gt;
&lt;H5&gt;7) Why don't some features like "Go To Definition" work?&lt;/H5&gt;
&lt;P&gt;Browse database information is separate from symbol (PDB) information within the debugger, so that information is maintained by the project system when a project is compiled and is not present within the symbol files.&amp;nbsp; So, unfortunately, that ability is not available here.&lt;/P&gt;
&lt;H5&gt;8) Why are some member or local variables unavailable?&amp;nbsp; Why can't I step into certain functions or lines of code?&lt;/H5&gt;
&lt;P&gt;The .NET Framework bits that you have installed on your machine are “retail” bits, which means they are optimized for size and performance.&amp;nbsp; Part of this optimization process removes certain information from the process when it is no longer needed.&amp;nbsp; Debugging retail assemblies reflects this.&amp;nbsp; However, most debugging information is still present in the session, and setting breakpoints earlier in a function often allows it to be visible.&amp;nbsp;&amp;nbsp; Another aspect of retail builds is that some small methods may be “inlined” which means you will not be able to step into them or set breakpoints in them.&amp;nbsp; But for the most part you can step and debug as normal.&lt;/P&gt;
&lt;H5&gt;9) Why does it take so long to download some source files?&lt;/H5&gt;
&lt;P&gt;Some source files are very large - nearly 1MB - and unfortunately many of these are the common ones to download.&amp;nbsp; However, most are significantly smaller and download quickly.&amp;nbsp; Source files must be downloaded each time you restart Visual Studio.&amp;nbsp; They are not persistently cached like symbols are.&lt;/P&gt;
&lt;H5&gt;10) Can I just download all of the code at once?&lt;/H5&gt;
&lt;P&gt;Not currently, but we are currently working on enabling this functionality in the future. &lt;/P&gt;
&lt;H5&gt;11) When I debug into VB code, for example in Microsoft.VisualBasic.dll, there is a C# style comment at the bottom, is this a bug?&lt;/H5&gt;
&lt;P&gt;Not really - we do run a post processing step when publishing the code and it adds a standard copyright banner at the bottom.&amp;nbsp; The processor, at this time, isn't able to support multiple comment formats.&amp;nbsp; Having it in a non-VB format doesn't affect the debugging functionality in any way.&lt;/P&gt;
&lt;H5&gt;12) I got to a source file and all that downloaded was a blank file?&lt;/H5&gt;
&lt;P&gt;This is something we've seen intermittently but have not been able to diagnose.&amp;nbsp; If you see this, usually the workaround is to just restart VS, which will force the file to reload.&amp;nbsp; If you observe this behavior, please use the "Email" link on the left to email me the name of the file that failed and about what time the failure occurred.&lt;/P&gt;
&lt;H5&gt;13) What happens if I download a Hotfix or a Service Pack?&amp;nbsp; Will I be able to get source for that?&lt;/H5&gt;
&lt;P&gt;We've built a system that allows us to publish any number of versions of source and symbols for a given product.&amp;nbsp; We haven't made any firm decisions on how often we'll publish source and are open to customer feedback on those issues.&amp;nbsp; For example, it's clear that publishing source for each Service Pack makes sense, but it's unclear if we'll be able to do so for each Hotfix.&amp;nbsp; Again, we're looking forward to feedback here.&lt;/P&gt;
&lt;P&gt;In the meantime, also note that symbol files may no longer match a module if a framework DLL has been updated via a Hotfix. In those cases, the modules window will indicate that the symbols could not be downloaded for that module. Assuming a new symbol file was published, it can be downloaded and cached using “Load Symbols”.&lt;/P&gt;
&lt;H5&gt;14) Can I point a web browser at the symbols URL and download the symbols directly?&lt;/H5&gt;
&lt;P&gt;No, you'll get an &lt;STRONG&gt;HTTP 400 (Bad Request)&lt;/STRONG&gt; response.&lt;/P&gt;
&lt;H5&gt;SUPPORT &lt;/H5&gt;
&lt;P&gt;If you have any other questions, please visit our new MSDN Forum on the topic: &lt;A href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=2019&amp;amp;SiteID=1" target=_blank mce_href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=2019&amp;amp;SiteID=1"&gt;Reference Source Server Discussion&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7133676" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sburke/archive/tags/Source/default.aspx">Source</category></item><item><title>Making .NET Framework Source Available to Developers</title><link>http://blogs.msdn.com/sburke/archive/2007/10/03/making-net-framework-source-available-to-developers.aspx</link><pubDate>Wed, 03 Oct 2007 20:30:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5265304</guid><dc:creator>sburke</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/sburke/comments/5265304.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sburke/commentrss.aspx?PostID=5265304</wfw:commentRss><description>&lt;p&gt;For any of you that have been following my blog, you may remember that I made a splash with a &lt;a href="http://www.shawnburke.com/archive/2005/02/03/shipping-windows-forms-source-for-.net-framework-2.0-thanks-for.aspx"&gt;post about possible ways to release Windows Forms source code&lt;/a&gt;.&amp;nbsp; This generated a lot of discussion and was picked up by many of the major tech websites out there.&amp;nbsp; That was in February of 2005.&lt;/p&gt; &lt;p&gt;Between now and then, I've taken a new role in the company and had other things (like shipping VS 2005 and getting the AJAX Control Toolkit off the ground) keeping me busy, but earlier this year I started to get much more focused on this idea and pulling together a plan to make it happen.&lt;/p&gt; &lt;p&gt;Today is an exciting day for us here Microsoft and our developers, see &lt;a href="http://weblogs.asp.net/scottgu/default.aspx"&gt;ScottGu's Blog&lt;/a&gt; for the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;big announcement&lt;/a&gt;:&amp;nbsp; &lt;strong&gt;We will be releasing .NET Framework Source Code as part of the VS 2008 (Orcas) release. &lt;/strong&gt; &lt;/p&gt; &lt;p&gt;Also check out the &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast83MicrosoftToReleaseNETFrameworkLibrariesSource.aspx"&gt;Podcast on Scott Hanselman's "Hanselminutes"&lt;/a&gt; that I did as well - lots more detail in there.&lt;/p&gt; &lt;p&gt;That's right.&amp;nbsp; Getting code ready for release is a big job, and most teams are still focused on getting Orcas itself released, but the current launch lineup is (in no particular order):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Base Class Libraries (mscorlib.dll)&lt;/li&gt; &lt;li&gt;ASP.NET (System.Web.dll)&lt;/li&gt; &lt;li&gt;Windows Forms (System.Drawing.DLL &amp;amp; System. Windows.Forms.dll)&lt;/li&gt; &lt;li&gt;ADO.NET (System.Data.DLL)&lt;/li&gt; &lt;li&gt;XML (System.Xml.DLL)&lt;/li&gt; &lt;li&gt;WPF (System.Windows.DLL)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There may be others as well, but that's what we've currently got a lock on for the initial rollout.&amp;nbsp; The system is setup so that it's easy for us to publish code, so more will get added as time goes on (working on getting LINQ, WCF, and Workflow in there as well).&lt;/p&gt; &lt;p&gt;Scott's Blog has details and screen-shots, but here's some more detail on how it works.&lt;/p&gt; &lt;p&gt;My main goal had been to enable a scenario that we're all familiar with...&lt;/p&gt; &lt;p&gt;&lt;em&gt;You're up late one night writing code.&amp;nbsp; Maybe it's a technology you're just learning or something you haven't tried before.&amp;nbsp; You're getting an exception from deep in the code.&amp;nbsp; You can't figure out why...the blogs aren't helping, the newsgroups aren't helping, the docs aren't helping.&amp;nbsp; The next day you call product support.&amp;nbsp; Since they don't have your code in front of them, it's also hard for them to triangulate what's going on. &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Now, imagine you've got source and symbols available.&amp;nbsp; With that, you can enable "Break on Exception" in&amp;nbsp; your debugger, run your scenario, and have the debugger stop exactly where the exception was &lt;strong&gt;thrown&lt;/strong&gt;.&amp;nbsp; The code gets loaded up and you sniff around a bit and realize - duh! - you forgot to set some other piece of state in an earlier call or a parameter.&amp;nbsp; You fix your code and you're off and running.&amp;nbsp; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;Even with one of the decompilers (e.g. Reflector) that you can easily get out there, this can be tricky to solve.&amp;nbsp; With the source it's much, much easier.&lt;/p&gt; &lt;p&gt;One of the big challenges here was building as system that didn't require each team to build their own process, installer, etc.&amp;nbsp; And we also had to account for updated releases (Service Packs, etc) so that this didn't become a big tax over time.&amp;nbsp; On the customer side, we also didn't want developers to have to wade through a bunch of choices to find the "right" source &amp;amp; symbols for their install, then have to manually install it and set it up, etc.&amp;nbsp; &lt;/p&gt; &lt;p&gt;It had to just work.&lt;/p&gt; &lt;p&gt;Fortunately, the technology needed to make that happen &lt;em&gt;already existed&lt;/em&gt; within the company.&amp;nbsp; We already have a unified place where all the symbols get pushed, and a unified way to get the source that matches those symbols.&amp;nbsp; What's more is that on the server-side, it's just a plain HTTP file server based on IIS.&lt;/p&gt; &lt;p&gt;So a few months ago I started pulling together resources from across the company to help get this to happen.&amp;nbsp; People really rallied around this and I got great support from teams across the company - on the VS side willing to do the work to make the VS Debugger understand how to get these files, on the Windows Debugger SDK side the technology to actually retrieve the symbols and source from an HTTP location, on the MSDN/Code Center side helping build out the server-side that will make all of this available when we launch later this year, and on the management side getting behind this effort and supporting it.&amp;nbsp; It's been great and those teams really are the ones that made this possible.&lt;/p&gt; &lt;p&gt;The experience really is fantastic.&amp;nbsp; There's a &lt;a href="http://www.scottgu.com/blogposts/source/step1.jpg"&gt;screenshot&lt;/a&gt; on Scott's blog for setting the options in the Tools/Options/Debugger dialog in Visual Studio 2008.&amp;nbsp; That's pretty much all you need to do.&amp;nbsp; Please note the URL in there is still TBD - that's an example.&lt;/p&gt; &lt;p&gt;All VS needs to know his where the &lt;strong&gt;symbols&lt;/strong&gt; are and the rest happens automatically.&amp;nbsp; When you launch your process, VS can go look at a variety of locations for the symbols to match your binaries - it knows how to tell. So one of the places it can look will be on the MSDN server for this stuff (note this is separate from the current symbol server that's out there - these symbols will have the full information in them like line numbers and variable names).&amp;nbsp; Once it finds the symbol file, it downloads it to the local cache.&amp;nbsp; Now, the symbol file has the pointers to the source files in it.&amp;nbsp; So when you hit a call frame - the debugger checks the symbols file and gets the path to the &lt;strong&gt;exact&lt;/strong&gt; right source file and retrieves that.&amp;nbsp; Moreover, as we release source and symbols for new parts of the product (or new products - this system works for anything) or product updates, they'll just be automatically available for use in a debugging session.&amp;nbsp; No configuration or extra steps needed.&amp;nbsp; Very nice.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/Mak.NETFrameworkSourceAvailabletoDevelop_939B/dlprocess_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="427" alt="dlprocess" src="http://blogs.msdn.com/blogfiles/sburke/WindowsLiveWriter/Mak.NETFrameworkSourceAvailabletoDevelop_939B/dlprocess_thumb.jpg" width="640" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It's just that easy - you can step through, set breakpoints, inspect variables, etc.&amp;nbsp; It's goodness, looking forward to making this available later this year!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5265304" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sburke/archive/tags/Source/default.aspx">Source</category></item></channel></rss>