WinDBG and Hangs When Debugging Managed Dumps


Because this is my first post on this blog, let me introduce myself.  My name is John Allen.  I’ve been on the PFE team for 5 years and been with Microsoft for 9 years.  All of those years I’ve been debugging and troubleshooting all kinds of customer applications.   I focus on all developer technologies and products.


One of the main things that myself and the others on the PFE - Developer team do is capture and analyze memory dump files.  A majority of the time we are debugging .NET applications and have found that sometimes the debugger will hang while trying to analyze a dump.  There are a couple of key characteristics:



  1. This is a 100% CPU Hang and the debugger does not recover - If your machine has more than one CPU the debugger will only be fully utilizing one of them.

  2. The Hang occurs when loading symbols for a managed assembly

  3. The Application that was dumped is .NET Framework 2.0 or greater.

We will talk more about symbol loading in a subsequent post but here is a workaround for this problem:



  1. Create an empty SymSrv.ini file in your Debuggers Directory (Default - C:\Program Files\Debugging Tools for Windows).  For more information check out the Symsrv.ini documentation on MSDN - http://msdn2.microsoft.com/en-us/library/ms681416.aspx

  2. Then open that file and add the following:

[exclusions]

System.Windows.Forms.pdb
System.pdb
System.Web.pdb

After you have done this you can try loading the dump file again and see if the hang occurs again.  If this does not resolve your problem in run the following command:


0:020> lm m *_ni start end module name

637a0000 63d02000 System_Xml_ni (deferred)
64890000 6498a000 System_Configuration_ni (deferred)
65140000 657a6000 System_Data_ni (deferred)
65f20000 66ac6000 System_Web_ni (deferred)
698f0000 69ad0000 System_Web_Services_ni (deferred)
790c0000 79b90000 mscorlib_ni (deferred)
7a440000 7ac06000 System_ni (deferred)

This will dump all of the native image assemblies - these are the assemblies that have been nGened and are loaded from the nGen cache.  Then for each assembly that is listed add them to the [exclusions] list in the SymSrv.ini file.  Be sure to remove the _ni, replace it with .dll and replace the remaining underscores with a dot.  For instance in the above output the [exclusion] list would look like:


[exclusions]
System.Xml.pdb
System.Configuration.pdb
System.Data.pdb
System.Web.pdb System.Web.Services.pdb
mscorlib.pdb
System.pdb

Finally, if you are looking for additional information on managed debugging you should check out Tess's blog - http://blogs.msdn.com/tess/


Thanks,
John Allen


 


Comments (0)

Skip to main content