<?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>Mikael Deurell : Debugging</title><link>http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx</link><description>Tags: Debugging</description><dc:language>sv-SE</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Fix till adplus på Windows7</title><link>http://blogs.msdn.com/deurell/archive/2009/02/11/fix-till-adplus-p-windows7.aspx</link><pubDate>Wed, 11 Feb 2009 16:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9412674</guid><dc:creator>mikaeld</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/deurell/comments/9412674.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=9412674</wfw:commentRss><description>&lt;P&gt;Min övergång till Windows7 har gått hur bra som helst. Det har bara varit två hangups som jag inte riktigt snyggt har kommit runt. Det ena är att adplus vägrar att hitta aktuella processer när jag skall ta ut en dump och den andra är att registreringar av WMI providers inte fungerar som jag skulle vilja. WMI sparar jag ett litet tag till, men adplus visar sig ha en ganska enkel lösning.&lt;/P&gt;
&lt;P&gt;Problemet ligger i tlist som används av adplus för att hitta aktuell process. Den enkla lösningen är att skicka med en -tlist switch till adplus men det är lite att gräva ner huvudet i sanden. Gräver man lite djupare (som &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx" mce_href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx"&gt;John Robbins&lt;/A&gt; gjorde) så finner man att i Windows 7 lägger till en extra [0] i output, såhär;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&lt;STRONG&gt;[0]&lt;/STRONG&gt; 1 32 5828 powershell.exe &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Command Line: ...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&lt;FONT face=Arial&gt;denna finns inte under Vista vilket gör att parsningen av processerna inte längre funkar och genererar en:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&amp;gt;adplus -hang –p&amp;nbsp;4242 -o c:\dumps&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Microsoft (R) Windows Script Host Version 5.8 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Copyright (C) Microsoft Corporation. All rights reserved. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&lt;BR&gt;&lt;STRONG&gt;The following requested processes are not executing: &lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&lt;STRONG&gt;4242;&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Annoying... Men vår hjälte har givetvis skapat en fix för detta som ni kan hitta &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/02/02/fixed-adplus-that-works-with-windows-7-and-probably-s2k8-r2.aspx" mce_href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/02/02/fixed-adplus-that-works-with-windows-7-and-probably-s2k8-r2.aspx"&gt;här&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Tack till &lt;A href="http://blogs.msdn.com/tess/" mce_href="http://blogs.msdn.com/tess/"&gt;Tess&lt;/A&gt; som tipsade min om detta! Nu är världen vacker igen...&lt;/P&gt;
&lt;P&gt;Happy debugging´on Windows7!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9412674" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>SOS/SOSEX kommandon från dagens MSDN Live</title><link>http://blogs.msdn.com/deurell/archive/2008/11/05/sos-sosex-kommandon-fr-n-dagens-msdn-live.aspx</link><pubDate>Wed, 05 Nov 2008 22:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9045080</guid><dc:creator>mikaeld</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/deurell/comments/9045080.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=9045080</wfw:commentRss><description>&lt;p&gt;För er som var på min debugging session på MSDN Live i veckan kommer här en sammanställning av alla de kommandon i WinDbg (SOS/SOSEX) jag använde. Håll tillgodo mina debuggingvänner! :-)&lt;/p&gt;&lt;p&gt;&lt;b&gt;Ta ut en hang dump med adplus&lt;/b&gt;&lt;br&gt;adplus -hang -p &amp;lt;numberofprocess&amp;gt; -o c:\hangs -quiet&lt;br&gt;&lt;br&gt;&lt;b&gt;Starta windbg &lt;/b&gt;&lt;br&gt;windbg -z pathtodump&lt;br&gt;&lt;br&gt;&lt;b&gt;Ladda sos/sosex extension för .net debuggning&lt;/b&gt;&lt;br&gt;.loadby sos mscorwks&lt;br&gt;.load pathtososex.dll&lt;br&gt;&lt;br&gt;&lt;b&gt;Kolla alla stackar&lt;/b&gt;&lt;br&gt;managed&lt;br&gt;~* e !clrstack&lt;br&gt;native&lt;br&gt;~* kb&lt;br&gt;combined&lt;br&gt;~* e !dumpstack&lt;br&gt;&lt;br&gt;&lt;b&gt;Kolla locks, syncobjects&lt;/b&gt;&lt;br&gt;!SyncBlk&lt;br&gt;&lt;br&gt;&lt;b&gt;Deadlocks&lt;/b&gt;&lt;br&gt;!dlk&lt;br&gt;&lt;br&gt;&lt;b&gt;Byt till tråd n&lt;/b&gt;&lt;br&gt;~ns&lt;br&gt;&lt;br&gt;&lt;b&gt;Starta cmdtree med "meny" med vanliga sos/sosex-kommandon&lt;/b&gt;&lt;br&gt;.cmdtree c:\debugging\cmdtree.txt&lt;br&gt;(innehåll till cmdtree.txt kan laddas ner från &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx" mce_href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx"&gt;John Robbins&lt;/a&gt; lysande &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/09/17/windbg-cmdtree-file-that-eases-some-sos-pain.aspx" mce_href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/09/17/windbg-cmdtree-file-that-eases-some-sos-pain.aspx"&gt;blog&lt;/a&gt;)&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Hämta time info&lt;/b&gt;&lt;br&gt;.time &lt;br&gt;&lt;br&gt;&lt;b&gt;Thread time&lt;/b&gt;&lt;br&gt;!runaway&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Visa threadpool info&lt;/b&gt;&lt;br&gt;!threadpool&lt;br&gt;&lt;br&gt;&lt;b&gt;Visa managed heap stat&lt;/b&gt;&lt;br&gt;!dumpheap -stat&lt;br&gt;&lt;br&gt;&lt;b&gt;Dumpa Large Object Heap (objekt över 85k)&lt;/b&gt;&lt;br&gt;!dumpheap -min 85000 (sos)&lt;br&gt;!dumpgen 3 (sosex)&lt;br&gt;&lt;br&gt;&lt;b&gt;Visa valt objekt&lt;/b&gt;&lt;br&gt;!do 00000001e60bcdd0 &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9045080" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Debugga i produktion eller testa bort i utvecklingsfas?</title><link>http://blogs.msdn.com/deurell/archive/2008/09/30/debugga-i-produktion-eller-testa-bort-i-utveckligsfas.aspx</link><pubDate>Tue, 30 Sep 2008 13:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8970124</guid><dc:creator>mikaeld</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/deurell/comments/8970124.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=8970124</wfw:commentRss><description>&lt;P&gt;Enkelt svar hoppas jag... Jag tänkte visa ett exempel på hur ni kan debugga en låg cpu hängning i asp.net med hjälp av WinDbg. Jag är långt ifrån någon mästare i WinDbg men jag har grym nytta av mina debuggingkunskaper i egenskap av Solution Architect. Hela meningen med del 1 i denna screencast är att visa hur man kan debugga en hängning i produktion för att sedan i del 2 visa hur ni kan testa bort denna avvikelse med hjälp av Visual Studio Team System Test Edition (VSTEST). &lt;/P&gt;
&lt;P&gt;Screencasts finns på &lt;A href="http://channel9.msdn.com/Niners/deurell/" mce_href="http://channel9.msdn.com/Niners/deurell/"&gt;Channel9&lt;/A&gt; och ni har länkar till de två delarna nedan;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://channel9.msdn.com/posts/deurell/ASPnet-hanganalys-med-WinDbg-Del-1/" mce_href="http://channel9.msdn.com/posts/deurell/ASPnet-hanganalys-med-WinDbg-Del-1/"&gt;Del 1 - Debugga låg cpu hang i asp.net med WinDbg&lt;/A&gt;&lt;BR&gt;&lt;A href="http://channel9.msdn.com/posts/deurell/ASPnet-hanganalys-med-VSTS-Test-Del-2/" mce_href="http://channel9.msdn.com/posts/deurell/ASPnet-hanganalys-med-VSTS-Test-Del-2/"&gt;Del 2 - %#&amp;amp; i att spendera tid i WinDbg och testa bort avvikelsen med VSTEST&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx" mce_href="http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx"&gt;Applikationen&lt;/A&gt; jag använder som bas i dessa screencasts är utvecklad av &lt;A href="http://blogs.msdn.com/tess/default.aspx" mce_href="http://blogs.msdn.com/tess/default.aspx"&gt;Tess Ferrandez&lt;/A&gt; och visar en hel del vanligt förekommande avvikelser. Lysande för att vässa era debugging och testkunskaper! Kan ni designa tester för att fånga samtliga avvikelser? Kan ni använda denna kunskap för att inte designa in dessa i er nästa arkitektur? Så klart ni kan... Öva, öva, öva! :-)&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="COLOR: gray; mso-themecolor: background1; mso-themeshade: 128"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I used to rule the world&lt;BR&gt;Seas would rise when I gave the word&lt;BR&gt;Now in the morning I sleep alone&lt;BR&gt;Sweep the streets I used to own...&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8970124" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/Test/default.aspx">Test</category><category domain="http://blogs.msdn.com/deurell/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Fr_26002300_228_3B00_schast+i+Bandhagen/default.aspx">Fr&amp;#228;schast i Bandhagen</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Screencast/default.aspx">Screencast</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Arkitektur/default.aspx">Arkitektur</category></item><item><title>Använd Powershell för att se om du kompilerat med debug build i prod</title><link>http://blogs.msdn.com/deurell/archive/2008/09/02/anv-nd-powershell-f-r-att-se-om-du-kompilerat-med-debug-build-i-prod.aspx</link><pubDate>Tue, 02 Sep 2008 18:14:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8920127</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/8920127.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=8920127</wfw:commentRss><description>&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;Debug är debug och prod är prod&amp;hellip; Så varför har vi en massa&amp;nbsp;assemblies i produktion som kompilerats med debug attribut? Vore det inte bra att kunna köra en batchkörning på alla assemblies i prod för att se om någon slarvat? Såklart ni vill! :-) Har ni powershell? Sweet!&lt;/p&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;Man tycker kanske att det skulle räcka med att kolla en;&lt;/p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;
&lt;p&gt;[&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;System.Diagnostics.DebuggableAttribute&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;]::&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;GetCustomAttribute&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$loadedAssembly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;, [&lt;/font&gt;&lt;/font&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;System.Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;]::&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;GetType&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;"System.Diagnostics.DebuggableAttribute"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;))&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;för att se om vi slängt på ett debug attribut&amp;hellip; En enkel $null check borde vara nog&amp;hellip; Men&amp;hellip; Det funkar med vb compilern (vem som nu använder den &lt;img src="http://blogs.msdn.com/blogfiles/deurell/smile3.gif" /&gt;), men c# compilern slänger alltid in&amp;nbsp;ett debug attribut (även i release build) vilket gör att vi får gå vidare med&amp;hellip;&lt;/p&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;Att kolla in DebuggingFlags&amp;hellip; Yay!&lt;br /&gt;&lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000cd" size="2" face="Courier New"&gt;get-debugmode&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;([&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;string&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;] &lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$nameOfAssembly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;)&lt;br /&gt;{&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$loadedAssembly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; [&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;System.Reflection.Assembly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;]::&lt;/font&gt;&lt;/font&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;Loadfile&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$nameOfAssembly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;, &lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$null&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;)&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$debugAttribute&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; [&lt;/font&gt;&lt;/font&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;System.Diagnostics.DebuggableAttribute&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;]::&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;GetCustomAttribute&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$loadedAssembly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;, [&lt;/font&gt;&lt;/font&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;System.Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;]::&lt;/font&gt;&lt;/font&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;GetType&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;"System.Diagnostics.DebuggableAttribute"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;))&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;&lt;font color="#800080" size="2" face="Courier New"&gt;$debugAttribute&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;&lt;img border="0" alt="Debug" src="http://blogs.msdn.com/blogfiles/deurell/debug_small.jpg" /&gt;&lt;/p&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;&lt;img border="0" alt="Release" src="http://blogs.msdn.com/blogfiles/deurell/release_small.jpg" /&gt;&lt;/p&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;Detta är ett utmärkt sätt för IT-Pros att få köra en härlig &amp;ldquo;blame-safari&amp;rdquo;/förbrödring på dev sidan och samtidigt får upp kvaliteten på det ni kör i produktion! &lt;img src="http://blogs.msdn.com/blogfiles/deurell/smile2.gif" /&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;font color="#808080" size="2"&gt;&lt;em&gt;Remember me when you're the one who's silver screened&lt;br /&gt;Remember me when you're the one you always dreamed&lt;br /&gt;Remember me whenever noses start to bleed&lt;br /&gt;Remember me, special needs&amp;hellip;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8920127" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Enkel w3wp-&gt;application pool mappning</title><link>http://blogs.msdn.com/deurell/archive/2008/09/02/enkel-w3wp-application-pool-mappning.aspx</link><pubDate>Tue, 02 Sep 2008 12:01:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8919596</guid><dc:creator>mikaeld</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/deurell/comments/8919596.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=8919596</wfw:commentRss><description>&lt;p&gt;Någonting har hänt och du skall snabbt leta reda reda på rätt w3wp process för den app pool som du så vackert konfigurerat upp&amp;hellip; Men vilken av alla&amp;nbsp;1000 w3wp processer&amp;nbsp;är det?&lt;/p&gt;
&lt;p&gt;Det enklaste är väl att köra tlist.exe som kommer med &lt;a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt;debugging tools for windows&lt;/a&gt;, vilket producerar följande:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;gt;tlist w3wp&lt;br /&gt;&lt;img border="0" alt="Tlist" src="http://blogs.msdn.com/blogfiles/deurell/tlist_small.jpg" /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Men, vore det inte kallare att göra det i Powershell? Det mest logiska vore att köra en &lt;em&gt;get-process w3wp&lt;/em&gt;, men vi vill få fram information om commandline för att greppa vilken app pool som är aktuell&amp;hellip; Och den finns inte här&amp;hellip; Men&amp;hellip; Kör med WMI istället så är vi hemma:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;gt;Get-WmiObject Win32_Process | Where-Object { $_.processname -eq "w3wp.exe" } | fl -property processname, commandline, processid&lt;br /&gt;&lt;img border="0" alt="Wmi" src="http://blogs.msdn.com/blogfiles/deurell/wmi_small.jpg" /&gt;&lt;/em&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Och konvertera till en funktion i powershell:&lt;/p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;
&lt;blockquote style="MARGIN-RIGHT: 0px" dir="ltr"&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000cd" size="2" face="Courier New"&gt;&lt;font color="#0000cd" size="2" face="Courier New"&gt;&lt;font color="#0000cd" size="2" face="Courier New"&gt;get-w3wpinfo&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;()&lt;br /&gt;{&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#5f9ea0" size="2" face="Courier New"&gt;&amp;nbsp; Get-WmiObject&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;Win32_Process&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;|&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;where&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;font color="#000080" size="2" face="Courier New"&gt;&lt;font color="#000080" size="2" face="Courier New"&gt;&lt;font color="#000080" size="2" face="Courier New"&gt;$_&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;&lt;font color="#8b4513" size="2" face="Courier New"&gt;Name&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000" size="2" face="Courier New"&gt;-eq &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;"w3wp.exe"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;em&gt;&amp;gt;get-w3wpinfo | Format-List -property processid, commandline&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hemma&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;You choose you chose&lt;br /&gt;Poetry over prose&amp;hellip;&lt;/font&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8919596" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Sjukt bra debuglabbar med Tess Ferrandez!</title><link>http://blogs.msdn.com/deurell/archive/2008/02/04/sjukt-bra-debuglabbar-med-tess-ferrandez.aspx</link><pubDate>Mon, 04 Feb 2008 20:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7443163</guid><dc:creator>mikaeld</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/deurell/comments/7443163.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=7443163</wfw:commentRss><description>&lt;P&gt;Tess Ferrandez har skapat en serie med labbar där hon presenterar vanliga post mortem debugging scenarios. Hon har byggt ihop en sjukt bugging applikation (BuggyBits) som innehåller vanliga fel som vi upptäcker i produktionsmiljö. Till detta beskriver hon de steg som krävs för att reproducera, ta en dump och felsöka. Du hittar allt &lt;A class="" href="http://blogs.msdn.com/tess/archive/2008/02/04/net-debugging-demos-lab-1-hang.aspx" mce_href="http://blogs.msdn.com/tess/archive/2008/02/04/net-debugging-demos-lab-1-hang.aspx"&gt;här&lt;/A&gt;! I vanlig Tessanda är det magiskt bra! Apropå Tess, sprang på henne&amp;nbsp;i fikarummet idag och som alltid&amp;nbsp;spårar samtalen ur till att täcka allt från WinDbg till bandvagnsåkning till fondygrytor, hur man åker med barn i knapplift&amp;nbsp;och magdans... Trevligt... Tess huserar på GTSC, vår supportorganisation som fått mig att se support i ett helt nytt ljus. Så många ruggigt begåvade, sociala och trevliga människor samlade på ett ställe... Och de är nästan osynliga för folk utanför huset... Konstigt...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7443163" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Metoder för att fixa buggar</title><link>http://blogs.msdn.com/deurell/archive/2007/09/22/metoder-f-r-att-hitta-buggar.aspx</link><pubDate>Sat, 22 Sep 2007 23:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5060141</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/5060141.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=5060141</wfw:commentRss><description>&lt;P&gt;Ok, sedan jag började få betalt för att gräva i andra&amp;nbsp;människors&amp;nbsp;produktionskod för att fixa buggar jag inte själv skapat, har jag fått lov att förfina mina debuggingmetoder en aning. Det visar sig att de flesta bolag verkar tillämpa någon av följande för att strukturera sin avlusning (både i utveckling och produktion)&lt;/P&gt;
&lt;P&gt;&lt;IMG title=Debug style="WIDTH: 500px; HEIGHT: 374px" height=374 alt=Debug src="http://www.mickesvarld.net/debug.jpg" width=500 mce_src="http://www.mickesvarld.net/debug.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Intuition&lt;BR&gt;&lt;/B&gt;Ok, har du skrivit koden själv och har 100% koll (vem har det?), så är det inte ovanligt att du har en såndär härlig magkänsla av vad det är som inte fungerar. Bra vid fulutveckling... Men... Denna metakunskap&amp;nbsp;följer oftast inte med när utvecklaren slänger över ett installationspaket till operations och en kille i Birkenstock tar över. Inte alltför sällan leder denna approach till katastrof då att den slutsats man drog var felaktig från början...&lt;BR&gt;&lt;B&gt;Skippa!&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Diagnostics&lt;BR&gt;&lt;/B&gt;Detta bygger på att vårt kära debugging-offer emitterar tillräckligt med information för att&amp;nbsp; vi skall kunna diagnostisera och mäta. Inte helt vanligt. Av någon anledning är debug, trace eller perf-counters inte vanligt förekommande i produktionskod. Fattar inte varför... Känns som om detta fått en fulstämpel på sig av någon anledning. Tron på att allt skall fixa sig för att man har code coverage på några lama unittester verkar regera på många ställen... Synd... &lt;BR&gt;&lt;B&gt;Inkludera alltid en verbose switch för Trace och använd den!&lt;BR&gt;Inkludera perf-counters för viktiga objekt&lt;BR&gt;Etablera en Health Model (en hälso state machine) för applikationen redan i första iterationen.&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;"Leap Of Faith"&lt;BR&gt;&lt;/B&gt;Ändra på något... Kolla om buggen försvinner... Repetera... Känns (helt allvarligt) som den vanligaste metoden därute... &lt;BR&gt;&lt;B&gt;Acceptera att detta är vanligt förkommande när någon annan kommer att felsöka din kod! Bli en av dem som lämnar träsket!&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;"Head In Sand" eller Strutsen&lt;BR&gt;&lt;/B&gt;Hävda att det är ett specialfall som inte kommer att inträffa i "verkligheten", bli defensiv och försvara dig med näbbar och klor.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;"Scientific Approach"&lt;BR&gt;&lt;/B&gt;- Samla in information&lt;BR&gt;- Analysera data&lt;BR&gt;- Kicka fram en hypotes (och skriv ner!)&lt;BR&gt;- Testa hypotesen (Våga inte ens tänka på att starta Visual Studio eller WinDbg och bränna tid innan ni nått hit)&lt;BR&gt;-&amp;nbsp;Upprepa&lt;/P&gt;
&lt;P&gt;Jag blir alltid fundersam över driftsorganisationer och utvecklingsavdelningar som börjar skrika MINNESLÄCKAGE! och skicka iväg incidentrapporter, eskalera ärenden till problem managers&amp;nbsp;utan att ens ha gjort ett försök till att använda den sistnämda metoden. Att etablera en process för hur en outsourcad driftsavdelning skall samla in data, analysera denna och kicka fram en hypotes borde vara insprängt i det kontrakt som etableras&amp;nbsp;innan&amp;nbsp;driftssättning. I detta dokument borde även definitioner på minnesläckage, bug, hög minnesanvändning, hang, crash&amp;nbsp;och annat ingå.&amp;nbsp;Annat jag skulle vilja se här är en lista på verktyg (adplus, WinDbg, DebugDiag) och hur dessa skall användas. Tänk vad mycket tid vi skulle vinna... Och vad mycket pengar vi skulle tjäna...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5060141" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/DFO/default.aspx">DFO</category><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Skall vi köra in i GDIProcessHandeQuota-väggen?</title><link>http://blogs.msdn.com/deurell/archive/2007/06/11/skall-vi-k-ra-in-i-gdiprocesshandequota-v-ggen.aspx</link><pubDate>Mon, 11 Jun 2007 17:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3230304</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/3230304.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=3230304</wfw:commentRss><description>&lt;P&gt;Sprang på ett intressant case häromdagen. En applikation använder ett mycket stort antal GDI objekt och helt plötsligt ger appen upp och vi&amp;nbsp;springer in i väggen! Varför? Det är inte helt konstigt att moderna appar som körs på burkar med&amp;nbsp;två, tre skärmar eller plasmaväggar gör att vi kan slänga upp mer stuff att fylla ytan med. Det underbara är att detta gör att nya härliga "features" poppar upp till ytan...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Problemet:&lt;/STRONG&gt;&lt;BR&gt;Applikationen kör på en kanonstor skärm och när&amp;nbsp;vi&amp;nbsp;allokerar fler än 10000 GDI-objekt i den aktulla processen&amp;nbsp;springer vi in i väggen.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Förklaring:&lt;BR&gt;&lt;/STRONG&gt;Väggen vi springer in i är en gräns som specas under &lt;STRONG&gt;GDIProcessHandeQuota&lt;/STRONG&gt; i registryt (default 10000). GDI objekt stödjer bara ett handle per objekt och handles till GDI-objekt är privata för aktuell process. Den teoretiska gränsen är 65536 ($10000) GDI-handles per session, men i de flesta fall är gränsen givetvis lägre (beroende på&amp;nbsp;hur mycket minne som finns tillgängligt). &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Så de officiella gränserna är:&lt;BR&gt;&lt;/STRONG&gt;&lt;EM&gt;Windows 2000 -&amp;gt; 16384&lt;BR&gt;Windows XP -&amp;gt; 65536&lt;BR&gt;Windows 2003 -&amp;gt; 65536&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Lösning:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Var inte rädd för att kränga upp &lt;STRONG&gt;GDIProcessHandeQuota&lt;/STRONG&gt; om den inte räcker till, men glöm inte att testa, testa och testa för att se hur prestandan påverkas. I detta fall räckte det att hysta upp denna till 30000 och allt fungerade fint. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;ps/&lt;BR&gt;Tänk på att aktuell burk kan börja gå på knäna, särskilt om vi kör andra grafikintensiva program samtidigt...&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;officiell info här: &lt;A href="http://msdn2.microsoft.com/en-us/library/ms724291.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms724291.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms724291.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3230304" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Ännu ett projekt som XMLSerialiserar sig till Out-Of-Memory...</title><link>http://blogs.msdn.com/deurell/archive/2007/03/23/nnu-ett-projekt-som-xmlseriliserar-sig-in-i-minnesl-ckor.aspx</link><pubDate>Fri, 23 Mar 2007 14:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1936928</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1936928.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1936928</wfw:commentRss><description>&lt;P mce_keep="true"&gt;Igår var jag inne och debuggade en dump från ett projekt där man hade problem med en w3wp process som "åt minne". Efter att ha kickat igång WinDbg och kört en .dumpdomain&amp;nbsp;som resulterade&amp;nbsp;i att&amp;nbsp;2600 dynamiskt skapade assemblies matrixade förbi på skärmen samtidigt som loggarna skvallrade lite om XmlSerializer misstänkte jag givetvis en klassisk &lt;A title=http://blogs.msdn.com/tess/archive/2006/02/15/532804.aspx href="http://blogs.msdn.com/tess/archive/2006/02/15/532804.aspx" mce_href="http://blogs.msdn.com/tess/archive/2006/02/15/532804.aspx"&gt;http://blogs.msdn.com/tess/archive/2006/02/15/532804.aspx&lt;/A&gt;. Och mycket riktigt fixade detta kakan. Tror detta är fjärde eller femte gången jag fixar en issue bundet till detta... Efter lite applåder och hallabaloo fick jag ett snällt mail från en av utvecklarna i projektet (tillika en gammal trevlig kollega från konsulttiden innan Microsoft) med en fråga om hur kan man lära sig att debugga produktionskod? Skrev ett litet svar, kanske någon mer som är intresserad... :-) &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Gott! Jag misstänkte det... :-) Självklart har jag en hel del tips och tricks kring debugging! Ett tips är att öva mycket! Kolla egen (och andras) kod med fet last, ta dumpar och titta efter mönster. Egentligen är det inte så många olika saker som kan hända, det flesta issues faller i en av typ 5 hinkar. Sen är det bara transport till mål. Sällan det inte går att pinnpointa en issue, särskilt inte om det är .net och man har tillgång till källkod, då är det oftast bara en tidsfråga... (Ok, har ni inte källkoden, eller har sprungit på en riktigt hårig historia, fortsätt läs stycket längst ned...) 
&lt;P&gt;Våra riktiga hjältar sitter&amp;nbsp;som coola&amp;nbsp;escalation-engineers,&amp;nbsp;Tess Ferrandez har en MAKALÖS!!! blogg där hon tar upp MYCKET bra debugging saker. Jag skulle börja med att styra in min rss läsare på den (&lt;A href="http://blogs.msdn.com/tess" mce_href="http://blogs.msdn.com/tess"&gt;http://blogs.msdn.com/tess&lt;/A&gt;). 
&lt;P&gt;Hennes kollega och cubiclemate har oxo en lysande bra blogg på &lt;A href="http://blogs.msdn.com/johan" mce_href="http://blogs.msdn.com/johan"&gt;http://blogs.msdn.com/johan&lt;/A&gt; 
&lt;P&gt;Jämfört med dem är jag en &lt;STRONG&gt;fet&lt;/STRONG&gt; amatör! :-) 
&lt;P&gt;Läs oxo John Robbins BugSlayer kolumn i msdn och läs hans bok (&lt;A href="http://www.amazon.com/Debugging-Microsoft-Applications-Pro-Developer-Paperback/dp/0735622027/ref=pd_bbs_sr_1/104-0676770-3213569?ie=UTF8&amp;amp;s=books&amp;amp;qid=1174646201&amp;amp;sr=8-1" mce_href="http://www.amazon.com/Debugging-Microsoft-Applications-Pro-Developer-Paperback/dp/0735622027/ref=pd_bbs_sr_1/104-0676770-3213569?ie=UTF8&amp;amp;s=books&amp;amp;qid=1174646201&amp;amp;sr=8-1"&gt;http://www.amazon.com/Debugging-Microsoft-Applications-Pro-Developer-Paperback/dp/0735622027/ref=pd_bbs_sr_1/104-0676770-3213569?ie=UTF8&amp;amp;s=books&amp;amp;qid=1174646201&amp;amp;sr=8-1&lt;/A&gt;). Mycket bra köra igång material, hur sätter man upp en symbolserver, hur funkar Son Of Strike och annat bra... 
&lt;P&gt;Det är inte alltid&amp;nbsp;minnes-läckage trots att detta oftast basuneras ut (en term som blivit lite misshandlad), utan hög minnesanvändning pga av något annat (taskig cachning etc, dynamiskt skapade assemblies mm). 
&lt;P&gt;Läs allt av Jeffrey Richter, gärna den gamla härliga Programming Windows boken oxo (&lt;A href="http://www.amazon.com/Programming-Applications-Microsoft-Windows-General/dp/1572319968/ref=sr_11_1/104-0676770-3213569?ie=UTF8&amp;amp;qid=1174654025&amp;amp;sr=11-1"&gt;http://www.amazon.com/Programming-Applications-Microsoft-Windows-General/dp/1572319968/ref=sr_11_1/104-0676770-3213569?ie=UTF8&amp;amp;qid=1174654025&amp;amp;sr=11-1&lt;/A&gt;). En bra förståelse av hur windows är uppbyggt gör det lättare att hitta mönster, särskilt när det är native grejjer. Typ, hur ser en stack ut med en lock, monitor, critical section, en ladida.... 
&lt;P&gt;Om du misstänker en native-mem-leak eller tycker att det är för hårigt att ta dumpar med adplus så finns det ett bra verktyg som du kan ladda ner (&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9BFA49BC-376B-4A54-95AA-73C9156706E7&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9BFA49BC-376B-4A54-95AA-73C9156706E7&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=9BFA49BC-376B-4A54-95AA-73C9156706E7&amp;amp;displaylang=en&lt;/A&gt;). IIS Diag Toolkit erbjuder något slags GUI till adplus i DebugDiag och den klarar även av att skjuta in en dll som övervakar alla heapallokeringar vilket gör att du får en bra överblick på vad som genererar native läckor. Går utmärkt att köra på andra processer än de som har något att göra med IIS + att de genererar en sexig rapport med diagram som får managers att tro att man rockar trots att man bara tryckt på en knapp... 
&lt;P&gt;Andra bra bloggar; 
&lt;P&gt;Advanced .NET Debugging 
&lt;P&gt;Maoni's WebLog 
&lt;P&gt;Vance Morrisons log 
&lt;P&gt;Rico Mariani's performance tidbits 
&lt;P&gt;Mike Stall's .NET Debugging Blog 
&lt;P&gt;Patrick Dussud 
&lt;P&gt;Roberto's debugging blog 
&lt;P&gt;(Snott från Tess BlogRoll) 
&lt;P&gt;Och om det inte går att komma vidare, öppna upp ett case hos oss. Jag har aldrig sett så mycket kompetens på ett ställe som när man stegar in hos vår support. Det är helt sjukt... Från att vara vass är man en i mängden! Uppfriskande!!! :-D 
&lt;P&gt;Hoppas det hjälper dig på vägen! 
&lt;P&gt;/Micke&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1936928" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/Debugging/default.aspx">Debugging</category></item></channel></rss>