<?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>Speaking of which... : Tools</title><link>http://blogs.msdn.com/johan/archive/tags/Tools/default.aspx</link><description>Tags: Tools</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>New tools-section</title><link>http://blogs.msdn.com/johan/archive/2007/11/27/new-quot-tools-quot-section.aspx</link><pubDate>Tue, 27 Nov 2007 16:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6550658</guid><dc:creator>JohanS</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/johan/comments/6550658.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johan/commentrss.aspx?PostID=6550658</wfw:commentRss><description>&lt;P&gt;I just added a page where I list some of the tools I use on a daily basis. You're probably familiar with most, if not all, of them already, but I still thought it would be nice to write a quick line or two on them.&lt;/P&gt;
&lt;P&gt;You'll find a permanent link under "Sections" in the menu to the left...&lt;/P&gt;
&lt;P&gt;...or you can click &lt;A href="http://blogs.msdn.com/johan/pages/useful-tools.aspx" mce_href="http://blogs.msdn.com/johan/pages/useful-tools.aspx"&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;/ Johan&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6550658" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johan/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Getting started with windbg - part II</title><link>http://blogs.msdn.com/johan/archive/2007/11/26/getting-started-with-windbg-part-ii.aspx</link><pubDate>Mon, 26 Nov 2007 16:49:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6531187</guid><dc:creator>JohanS</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/johan/comments/6531187.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johan/commentrss.aspx?PostID=6531187</wfw:commentRss><description>&lt;p&gt;This is a continuation of my previous post with the imaginative name &lt;a href="http://blogs.msdn.com/johan/archive/2007/11/13/getting-started-with-windbg-part-i.aspx"&gt;Getting started with windbg - part I&lt;/a&gt;. I'll be assuming that you've read it, so if you haven't I suggest you check it out first. We're still working with the same sample dump, so I'll pretty much pick up right where we left off.&lt;/p&gt; &lt;h1&gt;More useful commands&lt;/h1&gt; &lt;p&gt;Last time we used some nice commands from the sos-extension to look at the running callstacks, the requests, the CPU load of the threads, etc. We also dug deeper into the callstack to see what distinguished name we used for a SearchRequest. We'll keep using these commands, but also learn a few new ones.&lt;/p&gt; &lt;h2&gt;!dumpstackobjects (!dso)&lt;/h2&gt; &lt;p&gt;Now, imagine that we're looking at a specific thread and would like to see all managed objects referenced to by the current stack. Is there a way for us to do this? - There most certainly is. It's called dumpstackobjects, or dso for short. If we run it on the current thread we'll see a listing of objects that are referenced by the callstack. The whole output would look something like this (trimmed down to size):&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !dso&lt;br&gt;OS Thread Id: 0x1e8c (50)&lt;br&gt;ESP/REG&amp;nbsp; Object&amp;nbsp;&amp;nbsp; Name&lt;br&gt;17a9e534 0741f860 System.RuntimeType&lt;br&gt;17a9e6b8 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e6bc 27246f20 System.DirectoryServices.Protocols.SEC_WINNT_AUTH_IDENTITY_EX&lt;br&gt;17a9e740 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e744 27246f20 System.DirectoryServices.Protocols.SEC_WINNT_AUTH_IDENTITY_EX&lt;br&gt;17a9e764 27246f20 System.DirectoryServices.Protocols.SEC_WINNT_AUTH_IDENTITY_EX&lt;br&gt;17a9e768 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e780 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e784 27246e38 System.DirectoryServices.Protocols.SearchRequest&lt;br&gt;17a9e794 271fdf14 System.DirectoryServices.Protocols.LdapDirectoryIdentifier&lt;br&gt;17a9e7a8 27246ef8 System.Collections.ArrayList&lt;br&gt;17a9e7bc 27246ef8 System.Collections.ArrayList&lt;br&gt;17a9e7c8 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e8a4 27246e38 System.DirectoryServices.Protocols.SearchRequest&lt;br&gt;17a9e8d0 27246ed8 System.Object[]&amp;nbsp;&amp;nbsp;&amp;nbsp; (System.Object[])&lt;br&gt;17a9e8e0 073ff6b8 System.String&amp;nbsp;&amp;nbsp;&amp;nbsp; cn&lt;br&gt;17a9e8e4 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e8f4 27246d00 System.String&amp;nbsp;&amp;nbsp;&amp;nbsp; CN=Dummy,CN=Accounts,CN=useradm,DC=Dummy,DC=net&lt;br&gt;17a9e8f8 271fdfe0 System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;17a9e8fc 27246e38 System.DirectoryServices.Protocols.SearchRequest&lt;br&gt;17a9e910 03380310 System.String&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;17a9e914 27246e24 System.Object[]&amp;nbsp;&amp;nbsp;&amp;nbsp; (System.String[])&lt;br&gt;17a9e918 272399a8 System.String&amp;nbsp;&amp;nbsp;&amp;nbsp; CN=OID-Dummy-ABC123,CN=Dummy,CN=Accounts,CN=useradm,DC=Dummy,DC=net&lt;br&gt;17a9e91c 27246ddc System.String&amp;nbsp;&amp;nbsp;&amp;nbsp; (CN=OID-Dummy-ABC123)&lt;br&gt;...etc...&lt;/div&gt; &lt;p&gt;This is extremely useful when we want to see all the objects referenced by this thread alone. If you want to analyze one of the objects, simply copy the the address from the Object-column and use !dumpobject:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !do 271fdfe0 &lt;br&gt;Name: System.DirectoryServices.Protocols.LdapConnection&lt;br&gt;MethodTable: 14a2040c&lt;br&gt;EEClass: 149daf08&lt;br&gt;Size: 56(0x38) bytes&lt;br&gt;(C:\WINDOWS\assembly\GAC_MSIL\System.DirectoryServices.Protocols\2.0.0.0__b03f5f7f11d50a3a\System.DirectoryServices.Protocols.dll)&lt;br&gt;Fields:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Field&amp;nbsp;&amp;nbsp; Offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type VT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Name&lt;br&gt;14a2078c&amp;nbsp; 40000c3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 ...NetworkCredential&amp;nbsp; 0 instance 00000000 directoryCredential&lt;br&gt;14a2144c&amp;nbsp; 40000c4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 ...ificateCollection&amp;nbsp; 0 instance 271fe018 certificatesCollection&lt;br&gt;1202af88&amp;nbsp; 40000c5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.TimeSpan&amp;nbsp; 1 instance 271fdff0 connectionTimeOut&lt;br&gt;1466fe50&amp;nbsp; 40000c6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c ...rectoryIdentifier&amp;nbsp; 0 instance 271fdf14 directoryIdentifier&lt;br&gt;14a2034c&amp;nbsp; 4000236&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 connectionAuthType&lt;br&gt;14a223a4&amp;nbsp; 4000237&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 18 ...dapSessionOptions&amp;nbsp; 0 instance 271fe2d8 options&lt;br&gt;0fb896d8&amp;nbsp; 4000238&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IntPtr&amp;nbsp; 0 instance 564180944 ldapHandle&lt;br&gt;120261c8&amp;nbsp; 4000239&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 disposed&lt;br&gt;120261c8&amp;nbsp; 400023a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 bounded&lt;br&gt;120261c8&amp;nbsp; 400023b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 needRebind&lt;br&gt;14a22084&amp;nbsp; 400023e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1c ...pResponseCallback&amp;nbsp; 0 instance 271fe03c fd&lt;br&gt;120261c8&amp;nbsp; 4000243&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 setFQDNDone&lt;br&gt;120261c8&amp;nbsp; 4000244&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 automaticBind&lt;br&gt;120261c8&amp;nbsp; 4000245&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 needDispose&lt;br&gt;120261c8&amp;nbsp; 4000246&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 connected&lt;br&gt;14a2267c&amp;nbsp; 4000247&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20 ...s.QUERYCLIENTCERT&amp;nbsp; 0 instance 271fe394 clientCertificateRoutine&lt;br&gt;0fd314bc&amp;nbsp; 400023c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20 ...ections.Hashtable&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static handleTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:073fe504 &amp;lt;&amp;lt;&lt;br&gt;02c36ca0&amp;nbsp; 400023d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Object&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static objectLock&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:073fe53c &amp;lt;&amp;lt;&lt;br&gt;0fd314bc&amp;nbsp; 400023f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28 ...ections.Hashtable&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static asyncResultTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:073fe610 &amp;lt;&amp;lt;&lt;br&gt;14a21864&amp;nbsp; 4000240&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2c ...lResultsProcessor&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static partialResultsProcessor&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:073fe678 &amp;lt;&amp;lt;&lt;br&gt;12305e94&amp;nbsp; 4000241&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30 ....ManualResetEvent&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static waitHandle&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:073fe64c &amp;lt;&amp;lt;&lt;br&gt;14a21954&amp;nbsp; 4000242&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34 ...lResultsRetriever&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static retriever&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:073fe6a8 &amp;lt;&amp;lt;&lt;/div&gt; &lt;h2&gt;&amp;nbsp;&lt;/h2&gt; &lt;h2&gt;!dumparray (!da)&lt;/h2&gt; &lt;p&gt;As you might have noticed we have a couple of&amp;nbsp;object arrays on the stack.&amp;nbsp;Look for the System.Object[]-type in the listing above and you'll find them. If you execute !dumpobject on an array you'll only get information about the array itself, not it's contents. To get information about what's in the array we need to use the !dumparray-command, or !da for short.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !do 27239b98 &lt;br&gt;Name: System.Object[]&lt;br&gt;MethodTable: 02c3896c&lt;br&gt;EEClass: 02c388ec&lt;br&gt;Size: 24(0x18) bytes&lt;br&gt;Array: Rank 1, Number of elements 2, Type CLASS&lt;br&gt;Element Type: System.String&lt;br&gt;Fields:&lt;br&gt;None&lt;br&gt;&lt;br&gt;0:050&amp;gt; !da 27239b98 &lt;br&gt;Name: System.String[]&lt;br&gt;MethodTable: 02c3896c&lt;br&gt;EEClass: 02c388ec&lt;br&gt;Size: 24(0x18) bytes&lt;br&gt;Array: Rank 1, Number of elements 2, Type CLASS&lt;br&gt;Element Methodtable: 02c39310&lt;br&gt;[0] 272399a8&lt;br&gt;[1] 27239a44&lt;/div&gt; &lt;p&gt;As you can see the !dumparray-command gives us a bit more information about the object. We can see that it contains System.String data and we get the addresses of the two items in the array.&amp;nbsp;Since they're System.String-objects we can simply&amp;nbsp;use !dumpobject to view their contents.&lt;/p&gt; &lt;h2&gt;!objsize&lt;/h2&gt; &lt;p&gt;If you look at the listing above you'll see that the size of the object is listed as 24 bytes. To paraphrase Obi Wan Kenobi: "This is true, from a certain point of view." The 24 bytes are the size of the System.Object[]-object itself. Not it's contents. As you can see when we execute !dumparray, the array only contains two references to two strings. These strings are individual objects and could be 32 MB for all we know, so the 24 bytes are not the &lt;em&gt;total &lt;/em&gt;size of the array, but it would still be correct to claim that the System.Object[] is only 24 bytes large.&lt;/p&gt; &lt;p&gt;To get the &lt;em&gt;total&lt;/em&gt; size of the object we use the !objsize command:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !objsize 27239b98 &lt;br&gt;sizeof(27239b98) =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 348 (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x15c) bytes (System.Object[])&lt;/div&gt; &lt;p&gt;!objsize will iterate through all the child objects referenced by the&amp;nbsp;object, as well as all the grandchildren and so on. Apparently the total size of the array and it's child objects is 348 bytes.&lt;/p&gt; &lt;p&gt;If there are a lot of child objects it may take some time for !objsize to calculate the total size of the object. You should also be aware that !objsize may not always be as smart as you'd like. If, for example, you have a custom button control that references it's parent aspx-page you'd get the total size of the aspx-page and all it's child controls. In other words: If !objsize claims that the object in question is ridiculously large you might want to manually check what the object references using !dumpobject.&lt;/p&gt; &lt;h2&gt;!dumpheap&lt;/h2&gt; &lt;p&gt;This is another command that I use frequently. It is, however a command that you will want to use with at least one argument. Dumpheap with no arguments will dump &lt;em&gt;all &lt;/em&gt;objects on the heap, so I usually begin by using the -stat argument, which in itself will write a lot of info on the screen, but it will at least be summarized. Here' you'll find the trimmed down output of !dumpheap -stat:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !dumpheap -stat&lt;br&gt;------------------------------&lt;br&gt;Heap 0&lt;br&gt;total 2754508 objects&lt;br&gt;------------------------------&lt;br&gt;Heap 1&lt;br&gt;total 2761329 objects&lt;br&gt;------------------------------&lt;br&gt;total 5515837 objects&lt;br&gt;Statistics:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp; TotalSize Class Name&lt;br&gt;16e0a6d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Collections.Generic.ObjectEqualityComparer`1[[System.Data.ProviderBase.DbConnectionInternal, System.Data]]&lt;br&gt;16d9cd9c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Xml.Serialization.Configuration.DateTimeSerializationSection+DateTimeSerializationMode&lt;br&gt;16d9bf30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Diagnostics.OrdinalCaseInsensitiveComparer&lt;br&gt;16d9112c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Xml.Serialization.NameTable&lt;br&gt;16d7f664&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Xml.Serialization.TempAssemblyCache&lt;br&gt;163ea85c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Data.Res&lt;br&gt;1501e4c4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Collections.Generic.ObjectEqualityComparer`1[[System.Web.UI.Control, System.Web]]&lt;br&gt;14efb138&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.TimeoutValidator&lt;br&gt;14ef9964&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.Cache.HttpRequestCacheLevel&lt;br&gt;14ef77a8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 Microsoft.Win32.WinInetCache&lt;br&gt;14ef68e4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.WebRequest+WebProxyWrapper&lt;br&gt;14ef658c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.Configuration.ProxyElement+BypassOnLocalValues&lt;br&gt;14ef63d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.Configuration.ProxyElement+AutoDetectValues&lt;br&gt;14ef5b68&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.CaseInsensitiveAscii&lt;br&gt;14ef5610&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.HeaderInfoTable&lt;br&gt;14ef4718&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.HttpRequestCreator&lt;br&gt;14db6710&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.Configuration.MachineKeyValidationConverter&lt;br&gt;14db3140&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Collections.Generic.ObjectEqualityComparer`1[[System.Runtime.Serialization.MemberHolder, mscorlib]]&lt;br&gt;14b3f4d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.UI.SupportsEventValidationAttribute&lt;br&gt;...etc...&lt;br&gt;14a276a8&amp;nbsp;&amp;nbsp;&amp;nbsp; 19578&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 704808 System.DirectoryServices.Interop.AdsValueHelper&lt;br&gt;14a2ea24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9196&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 735680 System.Web.UI.WebControls.Label&lt;br&gt;14a2e51c&amp;nbsp;&amp;nbsp;&amp;nbsp; 16862&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 741928 System.Web.UI.WebControls.Style&lt;br&gt;125778ec&amp;nbsp;&amp;nbsp;&amp;nbsp; 48015&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 768240 System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry&lt;br&gt;120261c8&amp;nbsp;&amp;nbsp;&amp;nbsp; 65842&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 790104 System.Boolean&lt;br&gt;14a2ee7c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9198&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 809424 System.Web.UI.WebControls.Table&lt;br&gt;14b311c4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9647&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 810348 System.Web.UI.WebControls.Image&lt;br&gt;13a2b7dc&amp;nbsp;&amp;nbsp;&amp;nbsp; 34913&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 837912 System.Web.HttpServerVarsCollectionEntry&lt;br&gt;14b303a4&amp;nbsp;&amp;nbsp;&amp;nbsp; 10605&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 848400 System.Web.UI.WebControls.HyperLink&lt;br&gt;14d8e3d4&amp;nbsp;&amp;nbsp;&amp;nbsp; 77748&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 932976 Microsoft.Web.UI.WebControls.BaseChildNodeCollection+ActionType&lt;br&gt;14db90ac&amp;nbsp;&amp;nbsp;&amp;nbsp; 81372&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 976464 System.Web.UI.WebControls.FontInfo&lt;br&gt;14b30694&amp;nbsp;&amp;nbsp;&amp;nbsp; 28648&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1031328 System.Web.UI.WebControls.TableRow+CellControlCollection&lt;br&gt;14d8fdbc&amp;nbsp;&amp;nbsp;&amp;nbsp; 38912&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1089536 Microsoft.Web.UI.WebControls.TreeNodeCollection&lt;br&gt;14b3d0bc&amp;nbsp;&amp;nbsp;&amp;nbsp; 86592&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1385472 System.Web.UI.Pair&lt;br&gt;1466c5c4&amp;nbsp;&amp;nbsp;&amp;nbsp; 39305&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1414980 System.Web.UI.ControlCollection&lt;br&gt;14d8e48c&amp;nbsp;&amp;nbsp;&amp;nbsp; 77748&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1865952 Microsoft.Web.UI.WebControls.BaseChildNodeCollection+Action&lt;br&gt;1545061c&amp;nbsp;&amp;nbsp;&amp;nbsp; 38874&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2176944 Microsoft.Web.UI.WebControls.TreeNode&lt;br&gt;14b30eec&amp;nbsp;&amp;nbsp;&amp;nbsp; 52668&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2317392 System.Web.UI.WebControls.TableItemStyle&lt;br&gt;14a2f804&amp;nbsp;&amp;nbsp;&amp;nbsp; 28515&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2395260 System.Web.UI.WebControls.TableRow&lt;br&gt;14a2be6c&amp;nbsp;&amp;nbsp;&amp;nbsp; 40894&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2453640 System.Web.UI.LiteralControl&lt;br&gt;0fd3da00&amp;nbsp;&amp;nbsp; 228792&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2745504 System.Int32&lt;br&gt;14b3e3ac&amp;nbsp;&amp;nbsp; 244793&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2937516 System.Web.UI.IndexedString&lt;br&gt;14a2de94&amp;nbsp;&amp;nbsp; 198580&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3177280 System.Web.UI.StateBag&lt;br&gt;1466c454&amp;nbsp;&amp;nbsp;&amp;nbsp; 80512&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3542528 System.Web.UI.Control+OccasionalFields&lt;br&gt;12302c2c&amp;nbsp;&amp;nbsp; 205849&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4116980 System.Collections.Specialized.HybridDictionary&lt;br&gt;14b30024&amp;nbsp;&amp;nbsp;&amp;nbsp; 52934&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4446456 System.Web.UI.WebControls.TableCell&lt;br&gt;12302f2c&amp;nbsp;&amp;nbsp; 178294&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4992232 System.Collections.Specialized.ListDictionary&lt;br&gt;14a2e284&amp;nbsp;&amp;nbsp; 412762&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6604192 System.Web.UI.StateItem&lt;br&gt;14d8ce64&amp;nbsp;&amp;nbsp; 117078&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7024680 Microsoft.Web.UI.WebControls.CssCollection&lt;br&gt;0fd314bc&amp;nbsp;&amp;nbsp; 132065&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7395640 System.Collections.Hashtable&lt;br&gt;1230319c&amp;nbsp;&amp;nbsp; 422580&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8451600 System.Collections.Specialized.ListDictionary+DictionaryNode&lt;br&gt;1202a58c&amp;nbsp;&amp;nbsp; 380438&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9130512 System.Collections.ArrayList&lt;br&gt;0fd32050&amp;nbsp;&amp;nbsp; 133000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22582944 System.Collections.Hashtable+bucket[]&lt;br&gt;02c3896c&amp;nbsp;&amp;nbsp; 649842&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23275900 System.Object[]&lt;br&gt;0fd3c12c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3471&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 36385536 System.Byte[]&lt;br&gt;001fee20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 338&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65409920&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Free&lt;br&gt;02c39310&amp;nbsp;&amp;nbsp; 683083&amp;nbsp;&amp;nbsp;&amp;nbsp; 161821000 System.String&lt;br&gt;Total 5515837 objects&lt;br&gt;Fragmented blocks larger than 0.5 MB:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Followed by&lt;br&gt;2adf31cc&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.0MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2aff85d8 System.String&lt;br&gt;2b006a2c&amp;nbsp;&amp;nbsp; 20.3MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2c4530d8 System.Net.SocketAddress&lt;/div&gt; &lt;p&gt;As you can see we now get a listing sorted by size of all object-types on the heap. You'll usually find strings down at the bottom since that's what is commonly used the most.&lt;/p&gt; &lt;p&gt;Other useful arguments are -type and -mt (which stands for MethodTable). Using them you're able to see all objects of a specific type. For example. If we want to look at all HttpRequestCreators on the heap (there are one) you'll simply copy it's MethodTable which you'll find in the listing above (14ef4718) and use !dumpheap -mt&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !dumpheap -mt 14ef4718&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;------------------------------&lt;br&gt;Heap 0&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&lt;br&gt;0342ccf8 14ef4718&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;total 1 objects&lt;br&gt;------------------------------&lt;br&gt;Heap 1&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&lt;br&gt;total 0 objects&lt;br&gt;------------------------------&lt;br&gt;total 1 objects&lt;br&gt;Statistics:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp; TotalSize Class Name&lt;br&gt;14ef4718&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Net.HttpRequestCreator&lt;/div&gt; &lt;p&gt;This gives us the address of the object and if we'd like to inspect it closer we simply use !dumpobject on that address.&lt;/p&gt; &lt;p&gt;!dumpheap -type works pretty much the same way, except this time you filter the results by class name. !dumpheap -type performs a substring match, so if you write !dumpheap -type System.Web you'll get every object who's class name contains System.Web, which would be a lot.&lt;/p&gt; &lt;p&gt;Other useful arguments are -min and -max which accept a number representing the minimum/maximum number of bytes the object size should be. This can be really useful when troubleshooting string-abuse, etc. Also !dumpheap -stat -min 85000 would list all objects on the large object heap.&lt;/p&gt; &lt;h1&gt;Putting the tools to use&lt;/h1&gt; &lt;p&gt;I'd now like to use the commands we've covered in a bit more practical scenario. The dump we've been looking at is from a previous case of mine. The application in question was running on a Web garden with two workerprocesses. Session State was handled by a SQL Server. The customer was experiencing performance issues and the problem description was hazy at best. Anyway I had tons of dumps to work with, so I simply poked around to see what I could find. One thing I did pretty early on was to look at caching. According to the customer&amp;nbsp;they weren't using the cache at all, but I usually find it best to double-check this type of thing.&lt;/p&gt; &lt;h2&gt;Determining the size of the cache&lt;/h2&gt; &lt;p&gt;To find out how much data was kept in the cache I first needed to find the System.Web.Caching.Cache class.&amp;nbsp;So I ran !dumpheap -stat -type System.Web.Caching.Cache. Note that I also used the -stat argument. Otherwise I would have gotten a very long list of System.Web.Caching.CacheKeys and System.Web.Caching.CacheEntrys as well. Anyway, here's the result:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !dumpheap -type System.Web.Caching.Cache -stat&lt;br&gt;------------------------------&lt;br&gt;Heap 0&lt;br&gt;total 665 objects&lt;br&gt;------------------------------&lt;br&gt;Heap 1&lt;br&gt;total 1084 objects&lt;br&gt;------------------------------&lt;br&gt;total 1749 objects&lt;br&gt;Statistics:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp; TotalSize Class Name&lt;br&gt;123056f8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.Caching.CacheKeyComparer&lt;br&gt;&lt;font color="#ff0000"&gt;1230494c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.Caching.Cache&lt;br&gt;&lt;/font&gt;1230500c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24 System.Web.Caching.CacheMultiple&lt;br&gt;1230514c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 System.Web.Caching.CacheMemoryStats&lt;br&gt;123053b4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 36 System.Web.Caching.CacheMemoryTotalMemoryPressure&lt;br&gt;123059bc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40 System.Web.Caching.CacheUsage&lt;br&gt;12304bdc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 System.Web.Caching.CacheCommon&lt;br&gt;123054f4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 52 System.Web.Caching.CacheMemoryPrivateBytesPressure&lt;br&gt;12305874&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 64 System.Web.Caching.CacheExpires&lt;br&gt;12304e64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200 System.Web.Caching.CacheSingle&lt;br&gt;1255b594&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 85&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1360 System.Web.Caching.CacheDependency+DepFileInfo&lt;br&gt;123046c4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1440 System.Web.Caching.CacheDependency&lt;br&gt;123042ec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 47&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1504 System.Web.Caching.CacheItemRemovedCallback&lt;br&gt;123063fc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 832&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16640 System.Web.Caching.CacheKey&lt;br&gt;12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 732&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 52704 System.Web.Caching.CacheEntry&lt;br&gt;Total 1749 objects&lt;/div&gt; &lt;p&gt;Okay, so now I had the MethodTable for the System.Web.Caching.Cache object. Therefore I could now get the address to the object itself. I did this by asking !dumpheap to list all the objects on the heap with that MethodTable. I knew that there was just going to be one hit:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !dumpheap -mt 1230494c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;------------------------------&lt;br&gt;Heap 0&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&lt;br&gt;&lt;font color="#ff0000"&gt;03392d20&lt;/font&gt; 1230494c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;total 1 objects&lt;br&gt;------------------------------&lt;br&gt;Heap 1&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&lt;br&gt;total 0 objects&lt;br&gt;------------------------------&lt;br&gt;total 1 objects&lt;br&gt;Statistics:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp; TotalSize Class Name&lt;br&gt;1230494c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.Caching.Cache&lt;br&gt;Total 1 objects&lt;/div&gt; &lt;p&gt;So now I ran !objsize on this object to see how big it was. This took a little time to calculate, since the cache is quite complex and there are a lot of children to iterate through.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !objsize 03392d20 &lt;br&gt;sizeof(03392d20) =&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;266640828&lt;/font&gt; (&amp;nbsp;&amp;nbsp; 0xfe49dbc) bytes (System.Web.Caching.Cache)&lt;/div&gt; &lt;p&gt;So the cache is 266 MB in size. That's quite a lot&amp;nbsp;considering the fact that the customer claimed that they weren't using the cache at all!&lt;/p&gt; &lt;h2&gt;What is being cached?&lt;/h2&gt; &lt;p&gt;To sample what the customer was caching I then took a look at a few of the CacheEntrys. I already had the MethodTable for the System.Web.Caching.CacheEntry from when I ran !dumpheap -type System.Web.Caching.Cache -stat (above), so I could use that to retrieve all CacheEntrys.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !dumpheap -mt 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;------------------------------&lt;br&gt;Heap 0&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&lt;br&gt;033950bc 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;033a20d8 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;033ac79c 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;033da21c 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;033f04c4 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03428ec8 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;0344dab4 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03815d00 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;038265d8 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;....etc...&lt;br&gt;03af7010 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03b291bc 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03b2c674 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03b6dca0 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03b797dc 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03b85318 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03ba9150 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03c258cc 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;03de43c8 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;font color="#ff0000"&gt;03e160f8&lt;/font&gt; 12306820&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;total 382 objects&lt;br&gt;------------------------------&lt;br&gt;total 732 objects&lt;/div&gt; &lt;p&gt;Another valid command that would have given me the exact same output would off course have been !dumpheap -type System.Web.Caching.CacheEntry.&lt;/p&gt; &lt;p&gt;Okay, so now I had a long list of CacheEntrys. To sample the contents I just picked an address and examined it by using !dumpobject&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !do 03b2c674 &lt;br&gt;Name: System.Web.Caching.CacheEntry&lt;br&gt;MethodTable: 12306820&lt;br&gt;EEClass: 122f6470&lt;br&gt;Size: 72(0x48) bytes&lt;br&gt;(C:\WINDOWS\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll)&lt;br&gt;Fields:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Field&amp;nbsp;&amp;nbsp; Offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type VT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Name&lt;br&gt;02c39310&amp;nbsp; 4001327&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String&amp;nbsp; 0 instance 03b2c600 _key&lt;br&gt;0fb8f1f8&amp;nbsp; 4001328&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Byte&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 _bits&lt;br&gt;0fd3da00&amp;nbsp; 4001329&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 0 instance -1314181915 _hashCode&lt;br&gt;&lt;font color="#ff0000"&gt;02c36ca0&amp;nbsp; 4001330&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Object&amp;nbsp; 0 instance 03b2c644 _value&lt;br&gt;&lt;/font&gt;120219d0&amp;nbsp; 4001331&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.DateTime&amp;nbsp; 1 instance 03b2c690 _utcCreated&lt;br&gt;120219d0&amp;nbsp; 4001332&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.DateTime&amp;nbsp; 1 instance 03b2c698 _utcExpires&lt;br&gt;1202af88&amp;nbsp; 4001333&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.TimeSpan&amp;nbsp; 1 instance 03b2c6a0 _slidingExpiration&lt;br&gt;0fb8f1f8&amp;nbsp; 4001334&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Byte&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 _expiresBucket&lt;br&gt;123062d8&amp;nbsp; 4001335&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34 ...g.ExpiresEntryRef&amp;nbsp; 1 instance 03b2c6a8 _expiresEntryRef&lt;br&gt;0fb8f1f8&amp;nbsp; 4001336&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Byte&amp;nbsp; 0 instance 4294967295 _usageBucket&lt;br&gt;12306738&amp;nbsp; 4001337&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38 ...ing.UsageEntryRef&amp;nbsp; 1 instance 03b2c6ac _usageEntryRef&lt;br&gt;120219d0&amp;nbsp; 4001338&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.DateTime&amp;nbsp; 1 instance 03b2c6b0 _utcLastUpdate&lt;br&gt;123046c4&amp;nbsp; 4001339&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14 ...g.CacheDependency&amp;nbsp; 0 instance 00000000 _dependency&lt;br&gt;02c36ca0&amp;nbsp; 400133a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Object&amp;nbsp; 0 instance 033d8344 _onRemovedTargets&lt;br&gt;120219d0&amp;nbsp; 400132d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1bc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.DateTime&amp;nbsp; 1&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static NoAbsoluteExpiration&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:03395104 &amp;lt;&amp;lt;&lt;br&gt;1202af88&amp;nbsp; 400132e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1c0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.TimeSpan&amp;nbsp; 1&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static NoSlidingExpiration&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:03395114 &amp;lt;&amp;lt;&lt;br&gt;1202af88&amp;nbsp; 400132f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1c4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.TimeSpan&amp;nbsp; 1&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static OneYear&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:NotInit&amp;nbsp; 11b42540:03395124 &amp;lt;&amp;lt;&lt;/div&gt; &lt;p&gt;This dumped the&amp;nbsp;CacheEntry and it's properties. I figured the most interesting piece of information would be the _value, so&amp;nbsp;I simply copied the address of that property (look in the Value column) and used !dumpobject again.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; !do 03e160c8 &lt;br&gt;&lt;font color="#ff0000"&gt;Name: System.Web.SessionState.InProcSessionState&lt;br&gt;&lt;/font&gt;MethodTable: 14dbad5c&lt;br&gt;EEClass: 14e43af8&lt;br&gt;Size: 48(0x30) bytes&lt;br&gt;(C:\WINDOWS\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll)&lt;br&gt;Fields:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Field&amp;nbsp;&amp;nbsp; Offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type VT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Name&lt;br&gt;1466c9d8&amp;nbsp; 4001d89&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 ...ateItemCollection&amp;nbsp; 0 instance 1a7f5438 _sessionItems&lt;br&gt;1292672c&amp;nbsp; 4001d8a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 ...ObjectsCollection&amp;nbsp; 0 instance 00000000 _staticObjects&lt;br&gt;0fd3da00&amp;nbsp; 4001d8b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20 _timeout&lt;br&gt;120261c8&amp;nbsp; 4001d8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 _locked&lt;br&gt;120219d0&amp;nbsp; 4001d8d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.DateTime&amp;nbsp; 1 instance 03e160e4 _utcLockDate&lt;br&gt;0fd3da00&amp;nbsp; 4001d8e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 _lockCookie&lt;br&gt;1202bf60&amp;nbsp; 4001d8f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24 ...ReadWriteSpinLock&amp;nbsp; 1 instance 03e160ec _spinLock&lt;br&gt;0fd3da00&amp;nbsp; 4001d90&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 0 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 _flags&lt;/div&gt; &lt;p&gt;Here I found something interesting. The value stored was in fact an InProcSessionState object, which -in case&amp;nbsp;you didn't know this before- is stored in the Cache.&amp;nbsp;This meant that the claim that the application was using SQL Server Session state was incorrect. &lt;/p&gt; &lt;p&gt;As it turned out the customer had temporarily switched to In-process for a brief test, but forgotten to switch back again. Had the application been live they would have spotted this in no time, but since they were stress testing they weren't really paying attention to &lt;em&gt;what&lt;/em&gt; the server was returning as long as it returned &lt;em&gt;something&lt;/em&gt;. Unknowingly running session state in-process compromised the stress-test in a number of ways.&amp;nbsp;For example:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Memory usage for the worker process was a lot higher than expected&lt;/li&gt; &lt;li&gt;The load on the network was not as high as it would be under normal circumstances&lt;/li&gt; &lt;li&gt;The response times were no longer accountable&lt;/li&gt; &lt;li&gt;The SQL-server was not stressed to the extent it should have been, so any potential bottlenecks there went unnoticed&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This was in no way the final solution for their performance issue. There were a lot more things we had to deal with, but I think it's a really nice example of how to use only three commands (!dumpheap, !objsize &amp;amp; !dumpobject) to dig up some really useful information.&lt;/p&gt; &lt;p&gt;Later! / Johan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6531187" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johan/archive/tags/SessionState/default.aspx">SessionState</category><category domain="http://blogs.msdn.com/johan/archive/tags/WinDbg/default.aspx">WinDbg</category><category domain="http://blogs.msdn.com/johan/archive/tags/Managed+Heap/default.aspx">Managed Heap</category><category domain="http://blogs.msdn.com/johan/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/johan/archive/tags/Cache/default.aspx">Cache</category><category domain="http://blogs.msdn.com/johan/archive/tags/Debugging+School/default.aspx">Debugging School</category><category domain="http://blogs.msdn.com/johan/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Getting started with windbg - part I</title><link>http://blogs.msdn.com/johan/archive/2007/11/13/getting-started-with-windbg-part-i.aspx</link><pubDate>Tue, 13 Nov 2007 17:20:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6174183</guid><dc:creator>JohanS</dc:creator><slash:comments>42</slash:comments><comments>http://blogs.msdn.com/johan/comments/6174183.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johan/commentrss.aspx?PostID=6174183</wfw:commentRss><description>&lt;p&gt;Okay, I've previously written some random posts about how to &lt;a href="http://blogs.msdn.com/johan/archive/2007/01/11/how-to-install-windbg-and-get-your-first-memory-dump.aspx"&gt;set up windbg&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/johan/archive/2007/01/11/i-am-getting-outofmemoryexceptions-how-can-i-troubleshoot-this.aspx"&gt;how to troubleshoot OutOfMemoryExceptions&lt;/a&gt;. I thought I'd take a few steps back and review some of the basics in order to help you get started on using this fantastic tool.&lt;/p&gt; &lt;h1&gt;Basic Configuration&lt;/h1&gt; &lt;ol&gt; &lt;li&gt;Copy sos.dll from the framework directory to the folder where you installed windbg. Make sure you copy it from the same Framework version as the one you wish to investigate. If you'll be working with both 1.1 and 2.0 you can rename the SOS.dlls to SOS11.dll and SOS20.dll or put them in separate folders.  &lt;li&gt;Create a folder where you want to cache all the symbol files. For example: "C:\Symbols".  &lt;li&gt;Start windbg and open the dialogue to configure the symbol path by clicking File -&amp;gt; Symbol File Path.  &lt;li&gt;Enter the path, as well as the address from which you'll want to download missing symbols using the following syntax:&lt;br&gt;&lt;span class="InlineCode"&gt;srv*[cache path]*[symbols path]&lt;/span&gt;&lt;br&gt;I'd recommend the following path:&lt;br&gt;&lt;span class="InlineCode"&gt;srv*c:\symbols\public*http://msdl.microsoft.com/download/symbols&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;You should now be set to go. You're now ready to open up a saved dump, or attach to a process&lt;/p&gt; &lt;h1&gt;Useful commands&lt;/h1&gt; &lt;p&gt;I'll be using a dump from an IIS6-server to demonstrate some useful commands.&lt;/p&gt; &lt;p&gt;The first thing you'll want to do is load SOS. You'll do this using the .load command. The syntax is simple. .load [extension filename]. So if you want to load sos and haven't renamed the .dll you'd simply write:&lt;/p&gt; &lt;div class="DebugSample"&gt;.load sos&lt;/div&gt; &lt;p&gt;You'll now have&amp;nbsp;all the cool commands from the SOS-extension at your disposal as well as the default windbg ones. Commands from extensions are always preceded by a "!", so if you want to run the help-command for sos&amp;nbsp;you'd write&lt;/p&gt; &lt;div class="DebugSample"&gt;!help&lt;/div&gt; &lt;p&gt;If you should happen to have two extensions with an identically named command you can always separate them by typing ![extension name].[command] Example:&lt;/p&gt; &lt;div class="DebugSample"&gt;!sos.help&lt;/div&gt; &lt;p&gt;Okay, now that we know how to run the commands from the extension, try running !help. It should give you the following result.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; !help&lt;br&gt;-------------------------------------------------------------------------------&lt;br&gt;SOS is a debugger extension DLL designed to aid in the debugging of managed&lt;br&gt;programs. Functions are listed by category, then roughly in order of&lt;br&gt;importance. Shortcut names for popular functions are listed in parenthesis.&lt;br&gt;Type "!help &lt;functionname&gt;" for detailed info on that function. &lt;br&gt;&lt;br&gt;Object Inspection&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Examining code and stacks&lt;br&gt;-----------------------------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -----------------------------&lt;br&gt;DumpObj (do)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Threads&lt;br&gt;DumpArray (da)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLRStack&lt;br&gt;DumpStackObjects (dso)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IP2MD&lt;br&gt;DumpHeap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; U&lt;br&gt;DumpVC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DumpStack&lt;br&gt;GCRoot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEStack&lt;br&gt;ObjSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GCInfo&lt;br&gt;FinalizeQueue&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EHInfo&lt;br&gt;PrintException (pe)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COMState&lt;br&gt;TraverseHeap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BPMD &lt;br&gt;&lt;br&gt;Examining CLR data structures&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Diagnostic Utilities&lt;br&gt;-----------------------------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -----------------------------&lt;br&gt;DumpDomain&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VerifyHeap&lt;br&gt;EEHeap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DumpLog&lt;br&gt;Name2EE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FindAppDomain&lt;br&gt;SyncBlk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SaveModule&lt;br&gt;DumpMT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GCHandles&lt;br&gt;DumpClass&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GCHandleLeaks&lt;br&gt;DumpMD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VMMap&lt;br&gt;Token2EE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VMStat&lt;br&gt;EEVersion&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcInfo &lt;br&gt;DumpModule&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StopOnException (soe)&lt;br&gt;ThreadPool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MinidumpMode &lt;br&gt;DumpAssembly&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;DumpMethodSig&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Other&lt;br&gt;DumpRuntimeTypes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -----------------------------&lt;br&gt;DumpSig&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FAQ&lt;br&gt;RCWCleanupList&lt;br&gt;DumpIL&lt;/div&gt; &lt;p&gt;For more documentation on a specific command, type !help [name of command]&lt;/p&gt; &lt;h2&gt;.time&lt;/h2&gt; &lt;p&gt;This is not an SOS-command, which is evident by the command not beginning with a "!". Running the .Time command will show you relevant info about the time, as well as system uptime, process uptime and the amount of time spent in kernel &amp;amp; user mode.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; .time&lt;br&gt;Debug session time: Tue Oct 23 08:38:35.000 2007 (GMT+1)&lt;br&gt;System Uptime: 4 days 17:48:01.906&lt;br&gt;Process Uptime: 0 days 0:24:37.000&lt;br&gt;&amp;nbsp; Kernel time: 0 days 0:04:23.000&lt;br&gt;&amp;nbsp; User time: 0 days 0:03:28.000&lt;/div&gt; &lt;p&gt;As you can see the system has been up for over 4 days. The process has been running for 24½ minutes and has an accumulated CPU-time of about 8 minutes total. This would give us an average CPU-usage for the process of around 32,5%&lt;/p&gt; &lt;h2&gt;!threadpool&lt;/h2&gt; &lt;p&gt;We can then use the !Threadpool-command to find out exactly what the CPU-usage was at the time the dump was taken. We'll also get some useful information like the number of work requests in the queue, completion port threads and timers.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; !threadpool&lt;br&gt;CPU utilization 100%&lt;br&gt;Worker Thread: Total: 5 Running: 4 Idle: 1 MaxLimit: 200 MinLimit: 2&lt;br&gt;Work Request in Queue: 16&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ede30&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ee1e8&lt;br&gt;AsyncTimerCallbackCompletion TimerInfo@11b53760&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ee3a8&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023e3040&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ee178&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023edfb0&lt;br&gt;AsyncTimerCallbackCompletion TimerInfo@11b36428&lt;br&gt;AsyncTimerCallbackCompletion TimerInfo@11b53868&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ee060&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ee290&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023eded0&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023edd88&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ede98&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023ee258&lt;br&gt;Unknown Function: 6a2d945d&amp;nbsp; Context: 023edfe8&lt;br&gt;--------------------------------------&lt;br&gt;Number of Timers: 9&lt;br&gt;--------------------------------------&lt;br&gt;Completion Port Thread:Total: 3 Free: 3 MaxFree: 4 CurrentLimit: 2 MaxLimit: 200 MinLimit: 2&lt;/div&gt; &lt;p&gt;So we can see that currently we're using 100% of the CPU, which leads us to the next command.&lt;/p&gt; &lt;h2&gt;!runaway&lt;/h2&gt; &lt;p&gt;This is a nice command that will list all running threads and their CPU-usage. It's your best friend when troubleshooting a high CPU hang issue. &lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; !runaway&lt;br&gt;User Mode Time&lt;br&gt;&amp;nbsp; Thread&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time&lt;br&gt;&amp;nbsp; 25:1a94&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:39.937&lt;br&gt;&amp;nbsp; 16:1bc0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:38.390&lt;br&gt;&amp;nbsp; 50:1e8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:08.859&lt;br&gt;&amp;nbsp; 52:1e40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:08.687&lt;br&gt;&amp;nbsp; 20:1c2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:08.234&lt;br&gt;&amp;nbsp; 51:1340&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:08.171&lt;br&gt;&amp;nbsp; 21:1bcc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:06.953&lt;br&gt;&amp;nbsp; 26:13ec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:06.671&lt;br&gt;&amp;nbsp; 44:131c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:03.906&lt;br&gt;&amp;nbsp; 22:d8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:03.375&lt;br&gt;&amp;nbsp; 33:78c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:02.656&lt;br&gt;&amp;nbsp; 34:1a8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.906&lt;br&gt;&amp;nbsp; 29:1f5c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.828&lt;br&gt;&amp;nbsp;&amp;nbsp; 6:e28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.625&lt;br&gt;&amp;nbsp;&amp;nbsp; 5:1c78&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.546&lt;br&gt;&amp;nbsp; 23:14a4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.484&lt;br&gt;&amp;nbsp;&amp;nbsp; 4:5ac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.437&lt;br&gt;&amp;nbsp; 45:5dc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.421&lt;br&gt;&amp;nbsp;&amp;nbsp; 3:13b4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.421&lt;br&gt;&amp;nbsp; 47:19c8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.375&lt;br&gt;&amp;nbsp; 28:1b6c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.250&lt;br&gt;&amp;nbsp; 46:1dac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.156&lt;br&gt;&amp;nbsp;&amp;nbsp; 7:1dd8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.109&lt;br&gt;&amp;nbsp; 48:cdc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.093&lt;br&gt;&amp;nbsp; 49:1eac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.062&lt;br&gt;&amp;nbsp; 15:1a64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.062&lt;br&gt;&amp;nbsp;&amp;nbsp; 0:1804&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.046&lt;br&gt;&amp;nbsp; 36:4a4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.031&lt;br&gt;&amp;nbsp; 11:1eb4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.031&lt;br&gt;&amp;nbsp;&amp;nbsp; 1:10b4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.031&lt;br&gt;&amp;nbsp; 31:16ac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.015&lt;br&gt;&amp;nbsp; 14:4ac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.015&lt;br&gt;&amp;nbsp;&amp;nbsp; 2:186c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.015&lt;br&gt;&amp;nbsp; 59:590&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 58:294&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 57:16d0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 56:1578&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 55:1428&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 54:16d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 53:fd8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 43:1b8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 42:1c24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 41:1e2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 40:11b0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 39:edc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 38:1a08&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 37:171c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 35:1254&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 32:1f9c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 30:1ae8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 27:190c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 24:1d2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 19:1e38&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 18:ee4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 17:fb8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 13:1b54&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 12:1a48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp; 10:f64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp;&amp;nbsp; 9:1024&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&amp;nbsp;&amp;nbsp; 8:1b78&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;br&gt;&lt;/div&gt; &lt;p&gt;As you can see the total amount of time does &lt;em&gt;not&lt;/em&gt; match the total CPU utilization time that we got from the .time command. That's simply because threads get reused and recycled. This means that the total amount of CPU time used by a thread may have been split up over several page requests.&lt;/p&gt; &lt;h2&gt;!threads&lt;/h2&gt; &lt;p&gt;To get more information about the running threads we can run the !Threads-command. This will list all managed threads in the application, what application domain the thread is currently executing under, etc. The output will look like this:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; !threads&lt;br&gt;ThreadCount: 48&lt;br&gt;UnstartedThread: 0&lt;br&gt;BackgroundThread: 29&lt;br&gt;PendingThread: 0&lt;br&gt;DeadThread: 19&lt;br&gt;Hosted Runtime: no&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PreEmptive&amp;nbsp;&amp;nbsp; GC Alloc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lock&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID OSID ThreadOBJ&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Domain&amp;nbsp;&amp;nbsp; Count APT Exception&lt;br&gt;&amp;nbsp; 16&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 1bc0 001fccd0&amp;nbsp;&amp;nbsp; 1808220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 22&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; d8c 002016f0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA (Finalizer)&lt;br&gt;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp; 4ac 00242e58&amp;nbsp;&amp;nbsp; 880a220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA (Threadpool Completion Port)&lt;br&gt;&amp;nbsp; 23&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 14a4 11b39f18&amp;nbsp;&amp;nbsp;&amp;nbsp; 80a220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA (Threadpool Completion Port)&lt;br&gt;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 1d2c 11b41ad8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp; 25&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 1a94 11b46c70&amp;nbsp;&amp;nbsp; 180b220 Enabled&amp;nbsp; 27240c98:27241fd8 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 MTA (Threadpool Worker)&lt;br&gt;&amp;nbsp; 26&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 13ec 12ce2888&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 2a9f1434:2a9f33c0 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp; 27&amp;nbsp;&amp;nbsp;&amp;nbsp; a 190c 12d85eb8&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 00000000:00000000 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp; 29&amp;nbsp;&amp;nbsp;&amp;nbsp; b 1f5c 13df6a50&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 2ab1da6c:2ab1f1c0 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp; 30&amp;nbsp;&amp;nbsp;&amp;nbsp; c 1ae8 12d44a58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b220 Enabled&amp;nbsp; 00000000:00000000 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp; 31&amp;nbsp;&amp;nbsp;&amp;nbsp; d 16ac 12e2e008&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 2a81348c:2a8153c0 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 MTA&lt;br&gt;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp; e 1c78 12da2160&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp; 33&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp; 78c 11b674c8&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 2707b818:2707c1d8 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp; 34&amp;nbsp;&amp;nbsp; 12 1a8c 13f163c8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp; 36&amp;nbsp;&amp;nbsp; 13&amp;nbsp; 4a4 13eef718&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 2a7db4a4:2a7dd3c0 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; 14&amp;nbsp; 5ac 13ef2008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp; 42&amp;nbsp;&amp;nbsp; 10 1c24 13f0e950&amp;nbsp;&amp;nbsp; 880b220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA (Threadpool Completion Port)&lt;br&gt;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp; 11&amp;nbsp; e28 13f16008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp; f 13b4 13eba008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp; 43&amp;nbsp;&amp;nbsp; 15 1b8c 140db008&amp;nbsp;&amp;nbsp; 880b220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA (Threadpool Completion Port)&lt;br&gt;&amp;nbsp; 44&amp;nbsp;&amp;nbsp; 17 131c 140ceb28&amp;nbsp;&amp;nbsp; 200b220 Enabled&amp;nbsp; 272288c8:27229fd8 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 MTA&lt;br&gt;&amp;nbsp; 45&amp;nbsp;&amp;nbsp; 1d&amp;nbsp; 5dc 140cd0a0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;&amp;nbsp; 47&amp;nbsp;&amp;nbsp; 20 19c8 1651a008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16468880&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 46&amp;nbsp;&amp;nbsp; 1f 1dac 1650ab48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 1a&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 140d5008&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 16&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 140c5008&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 50&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 1e8c 14064420&amp;nbsp;&amp;nbsp; 180b220 Enabled&amp;nbsp; 27246f54:27247fd8 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 MTA (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 35&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1406e800&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 51&amp;nbsp;&amp;nbsp; 36 1340 140df008&amp;nbsp;&amp;nbsp; 180b220 Enabled&amp;nbsp; 2adec9cc:2aded1c0 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 MTA (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 37&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16566868&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 48&amp;nbsp;&amp;nbsp; 38&amp;nbsp; cdc 16578840&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 39&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16566c28&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 3b&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1646b8b0&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 3c&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16674008&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 3d&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16676418&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 3e&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16676fb8&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 3f&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16674d48&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 40&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1667de10&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 41&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16680050&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 42&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 166812e8&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 43&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 16683e60&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 52&amp;nbsp;&amp;nbsp; 44 1e40 165259e8&amp;nbsp;&amp;nbsp; 180b220 Enabled&amp;nbsp; 2adf126c:2adf31c0 11b42540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 MTA (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 45&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 165b7c08&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 46&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 165aa3d8&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 47&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 165242c8&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;XXXX&amp;nbsp;&amp;nbsp; 48&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 165e9500&amp;nbsp;&amp;nbsp; 1801820 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn (Threadpool Worker)&lt;br&gt;&amp;nbsp; 49&amp;nbsp;&amp;nbsp; 3a 1eac 165676f0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 220 Enabled&amp;nbsp; 00000000:00000000 0019daf0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Ukn&amp;nbsp;&lt;br&gt;&lt;/div&gt; &lt;p&gt;The threads with an ID of XXXX have ended and are waiting to be recycled. We can also see that the finalizer thread has an ID of 22. So if we'd seen an unhealthy amount of activity on thread 22 when we ran the !runaway-command we would now have known that we had a finalizer-issue on our hands. &lt;/p&gt; &lt;h2&gt;Switching to a specific thread&lt;/h2&gt; &lt;p&gt;To go to a specific thread we use the ~-command. The syntax is as follows: ~[number of thread]s. So to switch to thread 50 we would type the following:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:000&amp;gt; ~50s&lt;br&gt;&lt;/div&gt; &lt;p&gt;We have then switched to thread 50, and can use a lot of other useful commands.&lt;/p&gt; &lt;h2&gt;!clrstack&lt;/h2&gt; &lt;p&gt;This great command will list the callstack for the current thread. If you want additional information you can add the "-p" switch which will show you parameters and local variables as well.&lt;/p&gt; &lt;p&gt;Below is a sample listing of the clrstack for thread 50.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !clrstack&lt;br&gt;OS Thread Id: 0x1e8c (50)&lt;br&gt;ESP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EIP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;17a9e750 7d61c828 [NDirectMethodFrameSlim: 17a9e750] System.DirectoryServices.Protocols.Wldap32.ldap_bind_s(IntPtr, System.String, System.DirectoryServices.Protocols.SEC_WINNT_AUTH_IDENTITY_EX, System.DirectoryServices.Protocols.BindMethod)&lt;br&gt;17a9e768 14df70f9 System.DirectoryServices.Protocols.LdapConnection.BindHelper(System.Net.NetworkCredential, Boolean)&lt;br&gt;17a9e794 14df6de0 System.DirectoryServices.Protocols.LdapConnection.Bind()&lt;br&gt;17a9e79c 14df59e9 System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(System.DirectoryServices.Protocols.DirectoryRequest, Int32 ByRef)&lt;br&gt;17a9e8b8 14df56e8 System.DirectoryServices.Protocols.LdapConnection.SendRequest(System.DirectoryServices.Protocols.DirectoryRequest, System.TimeSpan)&lt;br&gt;17a9e8bc 14df5657 [InlinedCallFrame: 17a9e8bc]&lt;/div&gt; &lt;p&gt;So, reading from the bottom up we can see that an LdapConnection called the SendRequest method, which in turn called the SendRequestHelper method, which called the Bind method, and so on.&lt;/p&gt; &lt;p&gt;If we run !clrstack -p we get the following:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !clrstack -p&lt;br&gt;OS Thread Id: 0x1e8c (50)&lt;br&gt;ESP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EIP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;17a9e750 7d61c828 [NDirectMethodFrameSlim: 17a9e750] System.DirectoryServices.Protocols.Wldap32.ldap_bind_s(IntPtr, System.String, System.DirectoryServices.Protocols.SEC_WINNT_AUTH_IDENTITY_EX, System.DirectoryServices.Protocols.BindMethod)&lt;br&gt;17a9e768 14df70f9 System.DirectoryServices.Protocols.LdapConnection.BindHelper(System.Net.NetworkCredential, Boolean)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARAMETERS:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this = 0x271fdfe0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newCredential = &lt;no data&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; needSetCredential = &lt;no data&gt;&lt;br&gt;&lt;br&gt;17a9e794 14df6de0 System.DirectoryServices.Protocols.LdapConnection.Bind()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARAMETERS:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this = &lt;no data&gt;&lt;br&gt;&lt;br&gt;17a9e79c 14df59e9 System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(System.DirectoryServices.Protocols.DirectoryRequest, Int32 ByRef)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARAMETERS:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this = 0x271fdfe0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request = &lt;font color="#ff0000"&gt;0x27246e38&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageID = 0x17a9e8ec&lt;br&gt;&lt;br&gt;17a9e8b8 14df56e8 System.DirectoryServices.Protocols.LdapConnection.SendRequest(System.DirectoryServices.Protocols.DirectoryRequest, System.TimeSpan)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARAMETERS:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this = 0x271fdfe0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request = &lt;font color="#ff0000"&gt;0x27246e38&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requestTimeout = &lt;no data&gt;&lt;br&gt;&lt;br&gt;17a9e8bc 14df5657 [InlinedCallFrame: 17a9e8bc] &lt;br&gt;&lt;/div&gt; &lt;p&gt;We can now look at the parameters, like the DirectoryRequest that was sent to the SendRequest and SendRequestHelper methods. To do this we simply copy the address of the request, (0x27246e38) and use it as an argument for our next command.&lt;/p&gt; &lt;h2&gt;!dumpobject (!do)&lt;/h2&gt; &lt;p&gt;This is another crucial command. Dumpobject will dump the object at the specified address, so if we send the address of the request as a parameter we will get the request dumped to screen.:&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !do 0x27246e38&lt;br&gt;Name: System.DirectoryServices.Protocols.SearchRequest&lt;br&gt;MethodTable: 14b394c4&lt;br&gt;EEClass: 14d97ce0&lt;br&gt;Size: 52(0x34) bytes&lt;br&gt;GC Generation: 0&lt;br&gt;(C:\WINDOWS\assembly\GAC_MSIL\System.DirectoryServices.Protocols\2.0.0.0__b03f5f7f11d50a3a\System.DirectoryServices.Protocols.dll)&lt;br&gt;Fields:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Field&amp;nbsp;&amp;nbsp; Offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type VT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Name&lt;br&gt;02c39310&amp;nbsp; 4000102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String&amp;nbsp; 0 instance 00000000 directoryRequestID&lt;br&gt;14b398bc&amp;nbsp; 4000103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 ...ControlCollection&amp;nbsp; 0 instance 27246e90 directoryControlCollection&lt;br&gt;02c39310&amp;nbsp; 4000111&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;System.String&lt;/font&gt;&amp;nbsp; 0 instance &lt;font color="#ff0000"&gt;27246d00&lt;/font&gt; &lt;font color="#ff0000"&gt;dn&lt;/font&gt;&lt;br&gt;12579f5c&amp;nbsp; 4000112&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 ....StringCollection&amp;nbsp; 0 instance 27246eb4 directoryAttributes&lt;br&gt;02c36ca0&amp;nbsp; 4000113&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Object&amp;nbsp; 0 instance 27246ddc directoryFilter&lt;br&gt;14b39344&amp;nbsp; 4000114&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 directoryScope&lt;br&gt;14b393fc&amp;nbsp; 4000115&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 directoryRefAlias&lt;br&gt;0fd3da00&amp;nbsp; 4000116&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 directorySizeLimit&lt;br&gt;1202af88&amp;nbsp; 4000117&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.TimeSpan&amp;nbsp; 1 instance 27246e60 directoryTimeLimit&lt;br&gt;120261c8&amp;nbsp; 4000118&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 directoryTypesOnly&lt;br&gt;&lt;/div&gt; &lt;p&gt;Okay, so what's this? Well, it's a System.DirectoryServices.Protocols.SearchRequest object. This means that it has various properties defined by the System.DirectoryServices.Protocols.SearchRequest class. If you want to know more about these properties I suggest you&amp;nbsp;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.directoryservices.protocols.searchrequest_properties.aspx"&gt;look up the SearchRequest class in msdn&lt;/a&gt;. We have the RequestId, the Scope, the DistinguishedName, etc.&lt;/p&gt; &lt;p&gt;So, let's say we want to know what the distinguished name is for this particular request. We boldly assume that the dn-property we see in the listing above is what is called DistinguishedName by MSDN. Simply copy the address of the dn-property (27246d00) and use !dumpobject again. We can see that the property is a System.String, so the output should be pretty clear.&lt;/p&gt; &lt;div class="DebugSample"&gt;0:050&amp;gt; !do 27246d00 &lt;br&gt;Name: System.String&lt;br&gt;MethodTable: 02c39310&lt;br&gt;EEClass: 0fb610ac&lt;br&gt;Size: 112(0x70) bytes&lt;br&gt;GC Generation: 0&lt;br&gt; (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)&lt;br&gt;String: &lt;font color="#ff0000"&gt;CN=Dummy,CN=Accounts,CN=useradm,DC=dummy,DC=net&lt;/font&gt;&lt;br&gt;Fields:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp; Field&amp;nbsp;&amp;nbsp; Offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type VT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Name&lt;br&gt;0fd3da00&amp;nbsp; 4000096&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 m_arrayLength&lt;br&gt;0fd3da00&amp;nbsp; 4000097&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 47 m_stringLength&lt;br&gt;0fb80010&amp;nbsp; 4000098&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Char&amp;nbsp; 1 instance&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 43 m_firstChar&lt;br&gt;02c39310&amp;nbsp; 4000099&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static Empty&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:03380310 11b42540:03380310 &amp;lt;&amp;lt;&lt;br&gt;0fb86d44&amp;nbsp; 400009a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Char[]&amp;nbsp; 0&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static WhitespaceChars&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value&amp;nbsp; 0019daf0:03380324 11b42540:033855bc &amp;lt;&amp;lt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;Apparently, the distinguished name used was "CN=Dummy,CN=Accounts,CN=useradm,DC=dummy,DC=net". If we want to find out more we simply continue using !dumpobject to examine the objects and their respective values.&lt;/p&gt; &lt;p&gt;In my next post I thought I'd continue using the !dumpobject-command to probe through the w3wp-process, and introduce a couple of other great commands.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;To be continued...&lt;/p&gt; &lt;p&gt;/ Johan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6174183" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johan/archive/tags/WinDbg/default.aspx">WinDbg</category><category domain="http://blogs.msdn.com/johan/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/johan/archive/tags/Debugging+School/default.aspx">Debugging School</category><category domain="http://blogs.msdn.com/johan/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Test Projects and AJAX</title><link>http://blogs.msdn.com/johan/archive/2007/06/13/test-projects-and-ajax.aspx</link><pubDate>Wed, 13 Jun 2007 11:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3264094</guid><dc:creator>JohanS</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/johan/comments/3264094.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johan/commentrss.aspx?PostID=3264094</wfw:commentRss><description>&lt;p&gt;If you have an AJAX project and you're using Visual Studio Team Edition for Software Testers you might have noticed that the Web Test recorder is unable to record client side script navigation like AJAX requests.&lt;/p&gt; &lt;p&gt;The way the test recorder is created it attaches to IE and records all "standard" navigation. This means it will disregard&amp;nbsp;AJAX-calls as well as JScript popups. This is really unfortunate if you wish to stress test your new, cool AJAX project.&lt;/p&gt; &lt;h1&gt;What to do&lt;/h1&gt; &lt;p&gt;Basically there are two options for dealing with this.&lt;/p&gt; &lt;h2&gt;Wait for "Orcas"&lt;/h2&gt; &lt;p&gt;Well unless you have an abundance of time, this really isn't an option, but I thought it would be a good idea to mention the new features of the next version of Visual Studio. A lot of improvements have been made for tests alone:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Web Test Validation Rule Improvements to enable testers to create more comprehensive validation rules for the application being tested. These improvements include the following functions:  &lt;ul&gt; &lt;li&gt;Stop test on error  &lt;li&gt;Search request and response  &lt;li&gt;Add validation rule for title  &lt;li&gt;Redirect validation  &lt;li&gt;Provide test level validation rules  &lt;li&gt;Expected HTTP code  &lt;li&gt;Warning level for errors on dependents&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Better Web Test Data Binding to allow users to data bind .CSV and XML files, as well as databases to a web test, using a simple data binding wizard.  &lt;li&gt;Improved Load Test Results Management so a user can open or remove an existing load test result from the load test repository. User can also import and export load test results files.  &lt;li&gt;Load test summary report support for multiple machine graphs in Load Test Analyzer  &lt;li&gt;Web Test recorder now records Ajax requests and JavaScript pop-ups  &lt;li&gt;Load Modeling support initialize and terminate functions for a virtual user, as well as modeling load based on user pacing.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Use "Fiddler"&lt;/h2&gt; &lt;p&gt;If you're familiar with &lt;a href="http://www.fiddlertool.com/" target="_blank"&gt;Fiddler&lt;/a&gt; you &lt;em&gt;might&lt;/em&gt; be thinking "Oh, no! Copying each request from Fiddler is going to be terrible!" Actually you don't have to do that. Fiddler will do it for you, so keep reading!&lt;/p&gt; &lt;p&gt;Fiddler is a sweet little tool that will act as a proxy between your machine and the network. All HTTP-traffic will be intercepted and you'll be able to see the exact request and the exact response. While the Web Test recorder binds to one particular instance of IE, Fiddler will get everything. IM-sessions, software update checks, you name it. This means that there's a potential risk of Information Overload, but filtering out the interesting bits is quite easy.&lt;/p&gt; &lt;p&gt;Once you've recorded a session in fiddler you can then select the requests you're interested in, right click them and save them as a Visual Studio Web Test.&lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/johan/images/3263587/original.aspx"&gt;&lt;/p&gt; &lt;p&gt;That's it. You now have an XML file with the .webtest extension, ready to be imported into Visual Studio. One thing that you might want to do once you've imported it is to set the "Parse Dependent Requests"-property to false. Otherwise you'll download all dependent images, CSS stylesheets, etc.&amp;nbsp;twice.&lt;/p&gt; &lt;p&gt;/ Johan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3264094" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johan/archive/tags/Stress/default.aspx">Stress</category><category domain="http://blogs.msdn.com/johan/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/johan/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item></channel></rss>