<?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>.NET Debugging Demos Lab 6: Debugging Challenge (Memory leak)</title><link>http://blogs.msdn.com/tess/archive/2008/03/07/net-debugging-demos-lab-6-debugging-challenge-memory-leak.aspx</link><description>Here is the debugging challenge for lab 6... this one is really tricky... I will post the step-by-step instructions and review in about a week, but for now I will only post a problem description. As with lab 5, your mission, should you choose to accept</description><dc:language>sv-SE</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: .NET Debugging Demos Lab 6: Debugging Challenge (Memory leak)</title><link>http://blogs.msdn.com/tess/archive/2008/03/07/net-debugging-demos-lab-6-debugging-challenge-memory-leak.aspx#8113349</link><pubDate>Sat, 08 Mar 2008 18:09:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8113349</guid><dc:creator>Bruno Aleixo</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;since this was a memory leak case, the first thing i did was to take 2 different dumps at different&lt;/p&gt;
&lt;p&gt;moments so that i could compare differences so to know where to start looking.&lt;/p&gt;
&lt;p&gt;Also i used somer perf counters like virtual bytes, private bytes, CLR. Memory and CLR. Loading&lt;/p&gt;
&lt;p&gt;After getting the dumps, the first thing was to look at the perf counters to see where are &lt;/p&gt;
&lt;p&gt;the biggest differences.&lt;/p&gt;
&lt;p&gt;Things i noticed in perf counters: assembly loading was getting up, loader heap was algo increasing and virtual memory &lt;/p&gt;
&lt;p&gt;was also increasing.&lt;/p&gt;
&lt;p&gt;Next i opened both dumps and done a !eeheap -loader&lt;/p&gt;
&lt;p&gt;In my first dump i had &lt;/p&gt;
&lt;p&gt;(...)&lt;/p&gt;
&lt;p&gt;Module 07bdb62c: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Module 07bdbc0c: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Module 07bdc1ec: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Module 07bdc7cc: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Total size: 0x0(0)bytes&lt;/p&gt;
&lt;p&gt;--------------------------------------&lt;/p&gt;
&lt;p&gt;Total LoaderHeap size: 0x277000(2584576)bytes&lt;/p&gt;
&lt;p&gt;=======================================&lt;/p&gt;
&lt;p&gt;In my second dump i have&lt;/p&gt;
&lt;p&gt;(...)&lt;/p&gt;
&lt;p&gt;Module 09fa7b6c: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Module 09fa814c: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Module 09fa872c: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Module 09fa8d0c: Size: 0x0(0)bytes.&lt;/p&gt;
&lt;p&gt;Total size: 0x0(0)bytes&lt;/p&gt;
&lt;p&gt;--------------------------------------&lt;/p&gt;
&lt;p&gt;Total LoaderHeap size: 0x672000(6758400)bytes&lt;/p&gt;
&lt;p&gt;=======================================&lt;/p&gt;
&lt;p&gt;This means i had a increase due to assembly loading because it&amp;#180;s not suppose to &lt;/p&gt;
&lt;p&gt;keep on growing&lt;/p&gt;
&lt;p&gt;Then i did a !dumpdomain&lt;/p&gt;
&lt;p&gt;and i see a lot of this &lt;/p&gt;
&lt;p&gt;Assembly: 07847a98 [zhk22pzk, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]&lt;/p&gt;
&lt;p&gt;ClassLoader: 07847b30&lt;/p&gt;
&lt;p&gt;SecurityDescriptor: 07847998&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Module Name&lt;/p&gt;
&lt;p&gt;09fa814c zhk22pzk, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/p&gt;
&lt;p&gt;Assembly: 07848700 [9cqj_cx8, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]&lt;/p&gt;
&lt;p&gt;ClassLoader: 07848798&lt;/p&gt;
&lt;p&gt;SecurityDescriptor: 07848600&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Module Name&lt;/p&gt;
&lt;p&gt;09fa872c 9cqj_cx8, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/p&gt;
&lt;p&gt;Assembly: 07849368 [ol2fh7hw, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]&lt;/p&gt;
&lt;p&gt;ClassLoader: 07849400&lt;/p&gt;
&lt;p&gt;SecurityDescriptor: 07849268&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Module Name&lt;/p&gt;
&lt;p&gt;09fa8d0c ol2fh7hw, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/p&gt;
&lt;p&gt;With this kind of names it&amp;#180;s probably some dynamic assembly&lt;/p&gt;
&lt;p&gt;Next i tried to see what&amp;#180;s inside each one of this&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; !dumpmodule 09fa8d0c &lt;/p&gt;
&lt;p&gt;Name: ol2fh7hw, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/p&gt;
&lt;p&gt;Attributes: PEFile &lt;/p&gt;
&lt;p&gt;Assembly: 07849368&lt;/p&gt;
&lt;p&gt;LoaderHeap: 00000000&lt;/p&gt;
&lt;p&gt;TypeDefToMethodTableMap: 0a14153c&lt;/p&gt;
&lt;p&gt;TypeRefToMethodTableMap: 0a141554&lt;/p&gt;
&lt;p&gt;MethodDefToDescMap: 0a1415b4&lt;/p&gt;
&lt;p&gt;FieldDefToDescMap: 0a141620&lt;/p&gt;
&lt;p&gt;MemberRefToDescMap: 0a14164c&lt;/p&gt;
&lt;p&gt;FileReferencesMap: 0a14173c&lt;/p&gt;
&lt;p&gt;AssemblyReferencesMap: 0a141740&lt;/p&gt;
&lt;p&gt;MetaData start address: 0a1509e4 (4184 bytes)&lt;/p&gt;
&lt;p&gt;When i tried to save the module to find what&amp;#180;s going on inside i get this&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; lmvm ol2fh7hw&lt;/p&gt;
&lt;p&gt;start &amp;nbsp; &amp;nbsp;end &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;module name&lt;/p&gt;
&lt;p&gt;0a150000 0a152200 &amp;nbsp; ol2fh7hw &amp;nbsp; (deferred) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Image path: ol2fh7hw.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Image name: ol2fh7hw.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Using CLR debugging support for some symbols&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Has CLR image header, track-debug-data flag not set&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Timestamp: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sat Mar 08 10:03:50 2008 (47D26486)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;CheckSum: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 00000000&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;ImageSize: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00002200&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Translations: &amp;nbsp; &amp;nbsp; 0000.04b0 0000.04e0 0409.04b0 0409.04e0&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; !savemodule 0a150000 c:\d.dll&lt;/p&gt;
&lt;p&gt;3 sections in file&lt;/p&gt;
&lt;p&gt;section 0 - VA=2000, VASize=1894, FileAddr=200, FileSize=1a00&lt;/p&gt;
&lt;p&gt;section 1 - VA=4000, VASize=2a8, FileAddr=1c00, FileSize=400&lt;/p&gt;
&lt;p&gt;section 2 - VA=6000, VASize=c, FileAddr=2000, FileSize=200&lt;/p&gt;
&lt;p&gt;Fail to read memory&lt;/p&gt;
&lt;p&gt;In the generated dll the only thing i see is a Object reference not set...&lt;/p&gt;
&lt;p&gt;Here is my first question: any thoughts on why this happened?&lt;/p&gt;
&lt;p&gt;Next i pickup the MetaData start address: 0a1509e4 (4184 bytes)&lt;/p&gt;
&lt;p&gt;and tried to look inside using dc&lt;/p&gt;
&lt;p&gt;!dc 0a1509e4&lt;/p&gt;
&lt;p&gt;After a couple of dc&amp;#180;s i got&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; dc&lt;/p&gt;
&lt;p&gt;0a150f64 &amp;nbsp;00020007 00090016 00170002 8004000b &amp;nbsp;................&lt;/p&gt;
&lt;p&gt;0a150f74 &amp;nbsp;00000000 00000000 00000000 00000000 &amp;nbsp;................&lt;/p&gt;
&lt;p&gt;0a150f84 &amp;nbsp;0000045e 00000002 00000000 00000000 &amp;nbsp;^...............&lt;/p&gt;
&lt;p&gt;0a150f94 &amp;nbsp;00b80001 00000000 00000000 00000000 &amp;nbsp;................&lt;/p&gt;
&lt;p&gt;0a150fa4 &amp;nbsp;00000000 01430000 00000000 00000002 &amp;nbsp;......C.........&lt;/p&gt;
&lt;p&gt;0a150fb4 &amp;nbsp;00000000 00000000 029d0001 00000000 &amp;nbsp;................&lt;/p&gt;
&lt;p&gt;0a150fc4 &amp;nbsp;00000000 6f4d3c00 656c7564 6c6f003e &amp;nbsp;.....&amp;lt;Module&amp;gt;.ol&lt;/p&gt;
&lt;p&gt;0a150fd4 &amp;nbsp;37686632 642e7768 58006c6c 65536c6d &amp;nbsp;2fh7hw.dll.XmlSe&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; dc&lt;/p&gt;
&lt;p&gt;0a150fe4 &amp;nbsp;6c616972 74617a69 576e6f69 65746972 &amp;nbsp;rializationWrite&lt;/p&gt;
&lt;p&gt;0a150ff4 &amp;nbsp;6f725072 74637564 63694d00 6f736f72 &amp;nbsp;rProduct.Microso&lt;/p&gt;
&lt;p&gt;0a151004 &amp;nbsp;582e7466 532e6c6d 61697265 617a696c &amp;nbsp;ft.Xml.Serializa&lt;/p&gt;
&lt;p&gt;0a151014 &amp;nbsp;6e6f6974 6e65472e 74617265 73416465 &amp;nbsp;tion.GeneratedAs&lt;/p&gt;
&lt;p&gt;0a151024 &amp;nbsp;626d6573 5800796c 65536c6d 6c616972 &amp;nbsp;sembly.XmlSerial&lt;/p&gt;
&lt;p&gt;0a151034 &amp;nbsp;74617a69 526e6f69 65646165 6f725072 &amp;nbsp;izationReaderPro&lt;/p&gt;
&lt;p&gt;0a151044 &amp;nbsp;74637564 6c6d5800 69726553 7a696c61 &amp;nbsp;duct.XmlSerializ&lt;/p&gt;
&lt;p&gt;0a151054 &amp;nbsp;00317265 646f7250 53746375 61697265 &amp;nbsp;er1.ProductSeria&lt;/p&gt;
&lt;p&gt;(...)&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; dc&lt;/p&gt;
&lt;p&gt;0a1516e4 &amp;nbsp;45646165 6c45646e 6e656d65 6f540074 &amp;nbsp;eadEndElement.To&lt;/p&gt;
&lt;p&gt;0a1516f4 &amp;nbsp;33746e49 6d580032 6d614e6c 62615465 &amp;nbsp;Int32.XmlNameTab&lt;/p&gt;
&lt;p&gt;0a151704 &amp;nbsp;6700656c 4e5f7465 54656d61 656c6261 &amp;nbsp;le.get_NameTable&lt;/p&gt;
&lt;p&gt;0a151714 &amp;nbsp;64644100 6c6d7800 64616552 49007265 &amp;nbsp;.Add.xmlReader.I&lt;/p&gt;
&lt;p&gt;0a151724 &amp;nbsp;61745373 6c457472 6e656d65 626f0074 &amp;nbsp;sStartElement.ob&lt;/p&gt;
&lt;p&gt;0a151734 &amp;nbsp;7463656a 65536f54 6c616972 00657a69 &amp;nbsp;jectToSerialize.&lt;/p&gt;
&lt;p&gt;0a151744 &amp;nbsp;74697277 72007265 65646165 65730072 &amp;nbsp;writer.reader.se&lt;/p&gt;
&lt;p&gt;0a151754 &amp;nbsp;74495f74 74006d65 00657079 00500f00 &amp;nbsp;t_Item.type...P.&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; dc&lt;/p&gt;
&lt;p&gt;0a151764 &amp;nbsp;006f0072 00750064 00740063 17000100 &amp;nbsp;r.o.d.u.c.t.....&lt;/p&gt;
&lt;p&gt;0a151774 &amp;nbsp;00720050 0064006f 00630075 004e0074 &amp;nbsp;P.r.o.d.u.c.t.N.&lt;/p&gt;
&lt;p&gt;0a151784 &amp;nbsp;006d0061 19000065 00680073 00700069 &amp;nbsp;a.m.e...s.h.i.p.&lt;/p&gt;
&lt;p&gt;0a151794 &amp;nbsp;00690070 0067006e 006e0049 006f0066 &amp;nbsp;p.i.n.g.I.n.f.o.&lt;/p&gt;
&lt;p&gt;0a1517a4 &amp;nbsp;00531900 00690068 00700070 006e0069 &amp;nbsp;..S.h.i.p.p.i.n.&lt;/p&gt;
&lt;p&gt;0a1517b4 &amp;nbsp;00490067 0066006e 1700006f 00690044 &amp;nbsp;g.I.n.f.o...D.i.&lt;/p&gt;
&lt;p&gt;0a1517c4 &amp;nbsp;00740073 00690072 00750062 006f0074 &amp;nbsp;s.t.r.i.b.u.t.o.&lt;/p&gt;
&lt;p&gt;0a1517d4 &amp;nbsp;15000072 00610044 00730079 006f0054 &amp;nbsp;r...D.a.y.s.T.o&lt;/p&gt;
&lt;p&gt;It looks like the type is Product&lt;/p&gt;
&lt;p&gt;Back to the stack&lt;/p&gt;
&lt;p&gt;0:018&amp;gt; kb&lt;/p&gt;
&lt;p&gt;ChildEBP RetAddr &amp;nbsp;Args to Child &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;02e2edc0 7c822124 77e6baa8 000005e0 00000000 ntdll!KiFastSystemCallRet [d:\srvrtm\base\ntos\rtl\i386\userdisp.asm @ 545]&lt;/p&gt;
&lt;p&gt;02e2edc4 77e6baa8 000005e0 00000000 02e2ee08 ntdll!NtWaitForSingleObject+0xc [d:\srvrtm\base\ntdll\daytona\obj\i386\usrstubs.asm @ 2371]&lt;/p&gt;
&lt;p&gt;02e2ee34 77e6ba12 000005e0 000927c0 00000000 kernel32!WaitForSingleObjectEx+0xac [d:\srvrtm\base\win32\client\synch.c @ 1246]&lt;/p&gt;
&lt;p&gt;02e2ee48 02e31b52 000005e0 000927c0 fcc43d98 kernel32!WaitForSingleObject+0x12 [d:\srvrtm\base\win32\client\synch.c @ 1147]&lt;/p&gt;
&lt;p&gt;02e2ee74 7a511af6 02e2ef20 00000228 03645ec0 CLRStub[StubLinkStub]@2e31b52&lt;/p&gt;
&lt;p&gt;02e2ef50 7a511414 00000000 00000000 00000000 System_ni!System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated(Microsoft.Win32.SafeHandles.SafeUserTokenHandle, System.String, System.String, System.CodeDom.Compiler.TempFileCollection, System.String ByRef, System.String ByRef, System.String)+0x692&lt;/p&gt;
&lt;p&gt;02e2ef94 7a5334f6 00000000 00000000 00000000 System_ni!System.CodeDom.Compiler.Executor.ExecWaitWithCapture(Microsoft.Win32.SafeHandles.SafeUserTokenHandle, System.String, System.String, System.CodeDom.Compiler.TempFileCollection, System.String ByRef, System.String ByRef, System.String)+0x3c&lt;/p&gt;
&lt;p&gt;00000000 7a532abc 00000000 00000000 00000000 System_ni!Microsoft.CSharp.CSharpCodeGenerator.Compile(System.CodeDom.Compiler.CompilerParameters, System.String, System.String, System.String, System.String ByRef, Int32 ByRef, System.String)+0x1ca&lt;/p&gt;
&lt;p&gt;02e2f038 7a533cd7 00000000 00000000 00000000 System_ni!Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(System.CodeDom.Compiler.CompilerParameters, System.String[])+0x240&lt;/p&gt;
&lt;p&gt;02e2f090 7a532fd5 00000000 00000000 00000000 System_ni!Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(System.CodeDom.Compiler.CompilerParameters, System.String[])+0x1b7&lt;/p&gt;
&lt;p&gt;02e2f0c4 7a4ae13e 00000000 00000000 00000000 System_ni!Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(System.CodeDom.Compiler.CompilerParameters, System.String[])+0x29&lt;/p&gt;
&lt;p&gt;02e2f130 69d38122 00000000 00000000 00000000 System_ni!System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(System.CodeDom.Compiler.CompilerParameters, System.String[])+0x16&lt;/p&gt;
&lt;p&gt;02e2f130 69d36e75 00000000 00000000 00000000 System_Xml_ni!System.Xml.Serialization.Compiler.Compile(System.Reflection.Assembly, System.String, System.CodeDom.Compiler.CompilerParameters, System.Security.Policy.Evidence)+0x252&lt;/p&gt;
&lt;p&gt;02e2f1bc 69d35e11 00000000 00000000 00000000 System_Xml_ni!System.Xml.Serialization.TempAssembly.GenerateAssembly(System.Xml.Serialization.XmlMapping[], System.Type[], System.String, System.Security.Policy.Evidence, System.CodeDom.Compiler.CompilerParameters, System.Reflection.Assembly, System.Collections.Hashtable)+0x7e9&lt;/p&gt;
&lt;p&gt;03616ab4 69d9c288 00000000 00000000 00000000 System_Xml_ni!System.Xml.Serialization.TempAssembly..ctor(System.Xml.Serialization.XmlMapping[], System.Type[], System.String, System.String, System.Security.Policy.Evidence)+0x79&lt;/p&gt;
&lt;p&gt;03616ab4 69d9c16f 00000000 00000000 00000000 System_Xml_ni!System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(System.Xml.Serialization.XmlMapping, System.Type, System.String, System.String, System.Security.Policy.Evidence)+0x60&lt;/p&gt;
&lt;p&gt;02e2f230 69d9bdcf 00000000 00000000 00000000 System_Xml_ni!System.Xml.Serialization.XmlSerializer..ctor(System.Type, System.Xml.Serialization.XmlAttributeOverrides, System.Type[], System.Xml.Serialization.XmlRootAttribute, System.String, System.String, System.Security.Policy.Evidence)+0xb3&lt;/p&gt;
&lt;p&gt;034736e8 0306303e 00000000 00000000 00000000 System_Xml_ni!System.Xml.Serialization.XmlSerializer..ctor(System.Type, System.Type[])+0x13&lt;/p&gt;
&lt;p&gt;034736e8 03062ec8 00000000 00000000 00000000 App_Code_gukcpxoe!DataLayer.GetProductInfo(System.String)+0x106&lt;/p&gt;
&lt;p&gt;03612a8c 698a1928 00000000 00000000 00000000 App_Web_eofj0z0s!ProductInfo.Page_Load(System.Object, System.EventArgs)+0x80&lt;/p&gt;
&lt;p&gt;I wanted to see that DataLayer.GetPRoductInfo is all about so saved the module&lt;/p&gt;
&lt;p&gt;0:018&amp;gt; lmvm App_Code_gukcpxoe&lt;/p&gt;
&lt;p&gt;start &amp;nbsp; &amp;nbsp;end &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;module name&lt;/p&gt;
&lt;p&gt;02ff0000 02ffa000 &amp;nbsp; App_Code_gukcpxoe C (no symbols) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Loaded symbol image file: App_Code.gukcpxoe.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Image path: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\buggybits\0b50c844\fb864981\App_Code.gukcpxoe.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Image name: App_Code.gukcpxoe.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Using CLR debugging support for all symbols&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Has CLR image header, track-debug-data flag not set&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Timestamp: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sat Mar 01 11:17:44 2008 (47C93B58)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;CheckSum: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 00000000&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;ImageSize: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0000A000&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;File version: &amp;nbsp; &amp;nbsp; 0.0.0.0&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Product version: &amp;nbsp;0.0.0.0&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;File flags: &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 (Mask 3F)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;File OS: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4 Unknown Win32&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;File type: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.0 Dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;File date: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00000000.00000000&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Translations: &amp;nbsp; &amp;nbsp; 0000.04b0&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;InternalName: &amp;nbsp; &amp;nbsp; App_Code.gukcpxoe.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;OriginalFilename: App_Code.gukcpxoe.dll&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;ProductVersion: &amp;nbsp; 0.0.0.0&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;FileVersion: &amp;nbsp; &amp;nbsp; &amp;nbsp;0.0.0.0&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;FileDescription: &amp;nbsp; &lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;LegalCopyright: &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;0:018&amp;gt; !savemodule 02ff0000 &amp;nbsp;c:\module.dll&lt;/p&gt;
&lt;p&gt;3 sections in file&lt;/p&gt;
&lt;p&gt;section 0 - VA=2000, VASize=2654, FileAddr=200, FileSize=2800&lt;/p&gt;
&lt;p&gt;section 1 - VA=6000, VASize=2c8, FileAddr=2a00, FileSize=400&lt;/p&gt;
&lt;p&gt;section 2 - VA=8000, VASize=c, FileAddr=2e00, FileSize=200&lt;/p&gt;
&lt;p&gt;After opening the module in Ludz Reflector&lt;/p&gt;
&lt;p&gt;public Product GetProductInfo(string ProductName)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Product o = new Product();&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;ShippingInfo info = new ShippingInfo();&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;o.ProductName = ProductName;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;info.Distributor = &amp;quot;Buggy Bits&amp;quot;;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;info.DaysToShip = 5;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;o.shippingInfo = info;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Type[] extraTypes = new Type[] { typeof(ShippingInfo) };&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;MemoryStream stream = new MemoryStream();&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;new XmlSerializer(typeof(Product), extraTypes).Serialize((Stream) stream, o);&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;stream.Close();&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;return o;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;I see a call to XmlSerializer, typeof Product. Looks like i found the guilty one&lt;/p&gt;
&lt;p&gt;The XmlSerializer Leak is a known issue but just to be sure it was the correct&lt;/p&gt;
&lt;p&gt;ctor i looked inside XmlSerializer and found&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;this.tempAssembly = GenerateTempAssembly(this.mapping, type, defaultNamespace, location, evidence); &lt;/p&gt;
&lt;p&gt;Along the way i did other stuff trying to get to the right spot. I noticed that &lt;/p&gt;
&lt;p&gt;no dlls were on hard drive so that means the they were loaded into memory. I dumped some objects&lt;/p&gt;
&lt;p&gt;and found this&lt;/p&gt;
&lt;p&gt;0:019&amp;gt; !do 0x035ef744&lt;/p&gt;
&lt;p&gt;Name: System.CodeDom.Compiler.CompilerParameters&lt;/p&gt;
&lt;p&gt;MethodTable: 7a75403c&lt;/p&gt;
&lt;p&gt;EEClass: 7a753f18&lt;/p&gt;
&lt;p&gt;Size: 56(0x38) bytes&lt;/p&gt;
&lt;p&gt; (C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll)&lt;/p&gt;
&lt;p&gt;Fields:&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;MT &amp;nbsp; &amp;nbsp;Field &amp;nbsp; Offset &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type VT &amp;nbsp; &amp;nbsp; Attr &amp;nbsp; &amp;nbsp;Value Name&lt;/p&gt;
&lt;p&gt;7a74847c &amp;nbsp;4000f46 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4 ....StringCollection &amp;nbsp;0 instance 035ef77c assemblyNames&lt;/p&gt;
&lt;p&gt;7a74847c &amp;nbsp;4000f47 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8 ....StringCollection &amp;nbsp;0 instance 035ef7a0 embeddedResources&lt;/p&gt;
&lt;p&gt;7a74847c &amp;nbsp;4000f48 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c ....StringCollection &amp;nbsp;0 instance 035ef7c4 linkedResources&lt;/p&gt;
&lt;p&gt;790fa3e0 &amp;nbsp;4000f49 &amp;nbsp; &amp;nbsp; &amp;nbsp; 10 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.String &amp;nbsp;0 instance 036138cc outputName&lt;/p&gt;
&lt;p&gt;790fa3e0 &amp;nbsp;4000f4a &amp;nbsp; &amp;nbsp; &amp;nbsp; 14 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.String &amp;nbsp;0 instance 00000000 mainClass&lt;/p&gt;
&lt;p&gt;79104f64 &amp;nbsp;4000f4b &amp;nbsp; &amp;nbsp; &amp;nbsp; 30 &amp;nbsp; &amp;nbsp; &amp;nbsp; System.Boolean &amp;nbsp;1 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1 generateInMemory&lt;/p&gt;
&lt;p&gt;79104f64 &amp;nbsp;4000f4c &amp;nbsp; &amp;nbsp; &amp;nbsp; 31 &amp;nbsp; &amp;nbsp; &amp;nbsp; System.Boolean &amp;nbsp;1 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 includeDebugInformation&lt;/p&gt;
&lt;p&gt;790fed1c &amp;nbsp;4000f4d &amp;nbsp; &amp;nbsp; &amp;nbsp; 2c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.Int32 &amp;nbsp;1 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; -1 warningLevel&lt;/p&gt;
&lt;p&gt;790fa3e0 &amp;nbsp;4000f4e &amp;nbsp; &amp;nbsp; &amp;nbsp; 18 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.String &amp;nbsp;0 instance 03610570 compilerOptions&lt;/p&gt;
&lt;p&gt;790fa3e0 &amp;nbsp;4000f4f &amp;nbsp; &amp;nbsp; &amp;nbsp; 1c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.String &amp;nbsp;0 instance 00000000 win32Resource&lt;/p&gt;
&lt;p&gt;79104f64 &amp;nbsp;4000f50 &amp;nbsp; &amp;nbsp; &amp;nbsp; 32 &amp;nbsp; &amp;nbsp; &amp;nbsp; System.Boolean &amp;nbsp;1 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 treatWarningsAsErrors&lt;/p&gt;
&lt;p&gt;79104f64 &amp;nbsp;4000f51 &amp;nbsp; &amp;nbsp; &amp;nbsp; 33 &amp;nbsp; &amp;nbsp; &amp;nbsp; System.Boolean &amp;nbsp;1 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 generateExecutable&lt;/p&gt;
&lt;p&gt;7a754a14 &amp;nbsp;4000f52 &amp;nbsp; &amp;nbsp; &amp;nbsp; 20 ...empFileCollection &amp;nbsp;0 instance 035ef7e8 tempFiles&lt;/p&gt;
&lt;p&gt;7a769078 &amp;nbsp;4000f53 &amp;nbsp; &amp;nbsp; &amp;nbsp; 24 ...feUserTokenHandle &amp;nbsp;0 instance 00000000 userToken&lt;/p&gt;
&lt;p&gt;79109414 &amp;nbsp;4000f54 &amp;nbsp; &amp;nbsp; &amp;nbsp; 28 ...y.Policy.Evidence &amp;nbsp;0 instance 00000000 evidence&lt;/p&gt;
&lt;p&gt;Does the generateInMemory==1 means this ? I mean from this i can infer that&lt;/p&gt;
&lt;p&gt;no dll will be on hard drive.&lt;/p&gt;
&lt;p&gt;One final question is: &lt;/p&gt;
&lt;p&gt;using the !heap -l to get possibly leaks would i be able to go anywhere ? Or is it only&lt;/p&gt;
&lt;p&gt;useful if i&amp;#180;m looking at a unmanaged dump ?&lt;/p&gt;
&lt;p&gt;In first dump &lt;/p&gt;
&lt;p&gt;029c7fa8 &amp;nbsp;029c7fb0 &amp;nbsp;029c0000 &amp;nbsp;029c0000 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;40 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;40 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1c &amp;nbsp;busy extra fill &lt;/p&gt;
&lt;p&gt;		79e78360: mscorwks!EEHeapAlloc+0x12D&lt;/p&gt;
&lt;p&gt;		79e7f00d: mscorwks!CExecutionEngine::ClrHeapAlloc+0x3C&lt;/p&gt;
&lt;p&gt;		79ea55ef: mscorwks!Module::Initialize+0x8C&lt;/p&gt;
&lt;p&gt;		79ea49dc: mscorwks!Module::DoInit+0xAE&lt;/p&gt;
&lt;p&gt;		79ea4d79: mscorwks!Module::Create+0xF6&lt;/p&gt;
&lt;p&gt;		79eb5879: mscorwks!Assembly::Init+0xD7&lt;/p&gt;
&lt;p&gt;		79eb5767: mscorwks!Assembly::Create+0x120&lt;/p&gt;
&lt;p&gt;		79eb47f6: mscorwks!DomainAssembly::Allocate+0x190&lt;/p&gt;
&lt;p&gt;		79ea46b2: mscorwks!DomainFile::DoIncrementalLoad+0x63&lt;/p&gt;
&lt;p&gt;		79e9f575: mscorwks!AppDomain::TryIncrementalLoad+0x97&lt;/p&gt;
&lt;p&gt;		79e9f481: mscorwks!AppDomain::LoadDomainFile+0x19D&lt;/p&gt;
&lt;p&gt;		79eabca0: mscorwks!AppDomain::LoadDomainAssembly+0x116&lt;/p&gt;
&lt;p&gt;		79febbce: mscorwks!AppDomain::LoadAssembly+0x1A&lt;/p&gt;
&lt;p&gt;		7a2cb616: mscorwks!AssemblyNative::GetPostPolicyAssembly+0x268&lt;/p&gt;
&lt;p&gt;565 potential unreachable blocks were detected.&lt;/p&gt;
&lt;p&gt;In second dump &lt;/p&gt;
&lt;p&gt;029cfe28 &amp;nbsp;029cfe30 &amp;nbsp;029c0000 &amp;nbsp;029c0000 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;40 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;40 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1c &amp;nbsp;busy extra fill &lt;/p&gt;
&lt;p&gt;		79e78360: mscorwks!EEHeapAlloc+0x12D&lt;/p&gt;
&lt;p&gt;		79e7f00d: mscorwks!CExecutionEngine::ClrHeapAlloc+0x3C&lt;/p&gt;
&lt;p&gt;		79ea55ef: mscorwks!Module::Initialize+0x8C&lt;/p&gt;
&lt;p&gt;		79ea49dc: mscorwks!Module::DoInit+0xAE&lt;/p&gt;
&lt;p&gt;		79ea4d79: mscorwks!Module::Create+0xF6&lt;/p&gt;
&lt;p&gt;		79eb5879: mscorwks!Assembly::Init+0xD7&lt;/p&gt;
&lt;p&gt;		79eb5767: mscorwks!Assembly::Create+0x120&lt;/p&gt;
&lt;p&gt;		79eb47f6: mscorwks!DomainAssembly::Allocate+0x190&lt;/p&gt;
&lt;p&gt;		79ea46b2: mscorwks!DomainFile::DoIncrementalLoad+0x63&lt;/p&gt;
&lt;p&gt;		79e9f575: mscorwks!AppDomain::TryIncrementalLoad+0x97&lt;/p&gt;
&lt;p&gt;		79e9f481: mscorwks!AppDomain::LoadDomainFile+0x19D&lt;/p&gt;
&lt;p&gt;		79eabca0: mscorwks!AppDomain::LoadDomainAssembly+0x116&lt;/p&gt;
&lt;p&gt;		79febbce: mscorwks!AppDomain::LoadAssembly+0x1A&lt;/p&gt;
&lt;p&gt;		7a2cb616: mscorwks!AssemblyNative::GetPostPolicyAssembly+0x268&lt;/p&gt;
&lt;p&gt;1497 potential unreachable blocks were detected.&lt;/p&gt;
</description></item><item><title>Link Listing - March 8, 2008</title><link>http://blogs.msdn.com/tess/archive/2008/03/07/net-debugging-demos-lab-6-debugging-challenge-memory-leak.aspx#8113664</link><pubDate>Sat, 08 Mar 2008 19:12:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8113664</guid><dc:creator>Christopher Steen</dc:creator><description>&lt;p&gt;AJAX ASP.NET AJAX In-Depth: Application Events [Via: swalther ] WPF WPF Wiimote Library (Now With Project...&lt;/p&gt;
</description></item><item><title>re: .NET Debugging Demos Lab 6: Debugging Challenge (Memory leak)</title><link>http://blogs.msdn.com/tess/archive/2008/03/07/net-debugging-demos-lab-6-debugging-challenge-memory-leak.aspx#8113825</link><pubDate>Sat, 08 Mar 2008 19:50:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8113825</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;excellent, wow first time the length of a comment exceeded the length of the post I think:D &amp;nbsp;&lt;/p&gt;
&lt;p&gt;yeah !heap -l would mostly be useful with native leaks&lt;/p&gt;
</description></item><item><title>re: .NET Debugging Demos Lab 6: Debugging Challenge (Memory leak)</title><link>http://blogs.msdn.com/tess/archive/2008/03/07/net-debugging-demos-lab-6-debugging-challenge-memory-leak.aspx#8113992</link><pubDate>Sat, 08 Mar 2008 20:24:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8113992</guid><dc:creator>Bruno Aleixo</dc:creator><description>&lt;p&gt;:) I only saw how big it was after posting it &lt;/p&gt;
&lt;p&gt;Is there any reason why the savemodule throws an exception ?&lt;/p&gt;
&lt;p&gt;0:000&amp;gt; lmvm ol2fh7hw&lt;/p&gt;
&lt;p&gt;(...)&lt;/p&gt;
&lt;p&gt;start &amp;nbsp; &amp;nbsp;end &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;module name&lt;/p&gt;
&lt;p&gt;0a150000 0a152200 &amp;nbsp; ol2fh7hw &amp;nbsp; (deferred) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/p&gt;
&lt;p&gt;0:000&amp;gt; !savemodule 0a150000 c:\d.dll&lt;/p&gt;
&lt;p&gt;3 sections in file&lt;/p&gt;
&lt;p&gt;section 0 - VA=2000, VASize=1894, FileAddr=200, FileSize=1a00&lt;/p&gt;
&lt;p&gt;section 1 - VA=4000, VASize=2a8, FileAddr=1c00, FileSize=400&lt;/p&gt;
&lt;p&gt;section 2 - VA=6000, VASize=c, FileAddr=2000, FileSize=200&lt;/p&gt;
&lt;p&gt;Fail to read memory&lt;/p&gt;
</description></item></channel></rss>