webnoob webnoob - 14 days ago 5
ASP.NET (C#) Question

Having problems analyzing a .dmp with WinDBG

I will start by saying this is the first time I have done anything with WinDbg so excuse my silly mistakes if that is the issue. My website has been using a lot of memory and after reading blogs and watching videos by Tess Fernandez I am trying to use WinDBG to analyze my dump file.

The setup: My web server is a Windows 2008 64bit machine running my asp.net 2.0 website in 32 bit compatablity mode. I have set an environment variable to get all the symbols so I don't get errors when I load WinDbg

I am using the following commands in WinDbg:

.load C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos.dll
.load C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll
!eeheap -gc


and getting the following error:


The garbage collector data structures
are not in a valid state for
traversal. It is either in the "plan
phase," where objects are being moved
around, or we are at the
initialization or shutdown of the gc
heap. Commands related to displaying,
finding or traversing objects as well
as gc heap segments may not work
properly. !dumpheap and !verifyheap
may incorrectly complain of heap
consistency errors. Number of GC
Heaps: 1 Error requesting details


I have read this can be caused by some version mismatch and I think that could be the issue. In order to get this far, I have had to create the path


C:\Windows\Symbols\mscordacwks_AMD64_x86_2.0.50727.4016.dll\49CC5B00590000\mscordacwks_AMD64_x86_2.0.50727.4016.dll


so the libraries are loaded when I call !eeheap -gc (otherwise some other errors come out). The problem is that I have taken this mscordacwks.dll from the normal .NET folder and not the Framework64 one. I don't know if this is the cause of the issue but I have been banging my head against a brick wall and don't really know what else to do so I would appreciate some help.

Many thanks.

Answer

Take a look at this post. Also, make sure you're using the debugger and sos with the same bitness as the dump. The linked blog in the post explains this. So in your case, use the 64bit windbg, load the sos.dll from Framework64, and make sure your mscordacwks is "mscordacwks_amd64_amd64_2.0.50727.4016.dll" and is in a path that is accessible. I like to copy this assembly and the matching sos.dll into it's own folder together, but YMMV.