<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://mattonsoftware.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>mattonsoftware.com : Debugging</title><link>http://mattonsoftware.com/archive/tags/Debugging/default.aspx</link><description>Tags: Debugging</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Debugging Production Applications using ADPlus</title><link>http://mattonsoftware.com/archive/2006/09/21/debugging-production-applications-using-adplus.aspx</link><pubDate>Fri, 22 Sep 2006 03:02:00 GMT</pubDate><guid isPermaLink="false">6209d34a-f29a-4dc5-b4bf-33cf47346ec7:20</guid><dc:creator>matt</dc:creator><slash:comments>932</slash:comments><comments>http://mattonsoftware.com/comments/20.aspx</comments><wfw:commentRss>http://mattonsoftware.com/commentrss.aspx?PostID=20</wfw:commentRss><description>&lt;p&gt;ADPlus is used to take snapshots of processes in&amp;nbsp;environments where development-time debugging tools are not available e.g. Production server farms, end-users workstations. ADPlus is a Visual Basic&amp;nbsp;script provided as part of the Debugging Tools for Windows&amp;nbsp;that wraps the CDB debugger. &lt;/p&gt;

&lt;p&gt;Snapshots of processes&amp;nbsp;taken with ADPlus are analysed using the Windows Debugger (WinDbg). Managed processes in particular are analysed using SOS.dll, which contains extensions to WinDbg for debugging managed processes.&lt;/p&gt;&lt;p&gt;Practical applications include taking snapshots of&amp;nbsp;WinForms and
ASP.NET&amp;nbsp;processes to interrogate unhandled exceptions, memory
utilisation, resource contention etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing Debugging Tools for Windows in Target Environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx"&gt;debugging tools&lt;/a&gt;; 
&lt;/li&gt;&lt;li&gt;XCOPY deploy to target environment; 
&lt;/li&gt;&lt;li&gt;Create a folder to store snapshots; 
&lt;/li&gt;&lt;li&gt;Set CScript as the default scripting engine (required by ADPlus, also requires Windows Script Host 5.6 or higher, interrogate version using CSCRIPT /? command)&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote dir="ltr"&gt;
&lt;p&gt;CSCRIPT /H:CScript&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Taking a Snapshop using ADPlus&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following&amp;nbsp;examples demonstrate&amp;nbsp;taking a snapshot of a WinForms process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Via process id&lt;br&gt;ADPlus.vbs -c ADPlus_Config.xml -p 968&lt;br&gt;
&lt;/li&gt;&lt;li&gt;Via process name&lt;br&gt;ADPlus.vbs -c ADPlus_Config.xml -pn HelloWorldGUI.exe&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Note that ADPlus will warn that the _NT_SYMBOL_PATH environment variable is not set. This is ok&amp;nbsp;as the environment variable&amp;nbsp;is not required for taking snapshots, however, it is required for analysing the snapshot later.&lt;/p&gt;
&lt;p&gt;The following example ADPlus_Config.xml file configures ADPlus for Hang mode (hang mode instructs ADPlus to take the&amp;nbsp;snapshot immediately,&amp;nbsp;crash mode is another option that attaches the debugger to the process, then waits for process to exit before generating the snapshot):&lt;/p&gt;
&lt;p&gt;&amp;lt;ADPlus&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RunMode&amp;gt;&lt;strong&gt;HANG&lt;/strong&gt;&amp;lt;/RunMode&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Option&amp;gt;Quiet&amp;lt;/Option&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;OutputDir&amp;gt; &lt;strong&gt;C:\Snapshots&lt;/strong&gt; &amp;lt;/OutputDir&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Load sos.dll --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PreCommands&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Cmd&amp;gt; .load C:\Program Files\Debugging Tools for Windows\clr10\sos.dll &amp;lt;/Cmd&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/PreCommands&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Exceptions&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Do a unique mini dump with full heap on every --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- first chance exception.&amp;nbsp;--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Config&amp;gt;&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;lt;Code&amp;gt;&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; AllExceptions&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;lt;/Code&amp;gt;&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;lt;Actions1&amp;gt;&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; FullDump;&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;lt;/Actions1&amp;gt;&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;lt;ReturnAction1&amp;gt;&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; GN&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;lt;/ReturnAction1&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Config&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Exceptions&amp;gt;&lt;br&gt;&amp;lt;/ADPlus&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using WinDBG and SOS.dll&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install debugging tools; 
&lt;/li&gt;&lt;li&gt;Add installation location to PATH environment variable; 
&lt;/li&gt;&lt;li&gt;Create a folder to store symbols; 
&lt;/li&gt;&lt;li&gt;Add new environment variable, referencing the symbols folder:&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote dir="ltr"&gt;
&lt;p&gt;Name: _NT_SYMBOL_PATH&lt;br&gt;Value: SRV*&lt;strong&gt;c:\temp\symbols&lt;/strong&gt;* &lt;a href="http://msdl.microsoft.com/download/symbols"&gt;http://msdl.microsoft.com/download/symbols&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This setting is used by WinDbg to dynamically download symbols (pdb files) on demand.&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Launch WinDbg.exe; 
&lt;/li&gt;&lt;li&gt;Open the snapshot using File --&amp;gt;&amp;nbsp;Open Crash Dump; 
&lt;/li&gt;&lt;li&gt;Load SOS.dll by entering the following command: &lt;/li&gt;&lt;/ul&gt;
&lt;blockquote dir="ltr"&gt;
&lt;p&gt;.load C:\Program Files\Debugging Tools for Windows\clr10\sos.dll&lt;/p&gt;&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;Useful WinDbg/SOS.dll commands are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;!help (all available commands)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!help &amp;lt;functionname&amp;gt; (help on provided function)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!clrstack (shows managed stack)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!dae (dumps all managed exceptions, noting that instances of ExecutionEngineException, StackOverflowException and OutOfMemoryException&amp;nbsp; are normal)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!EEStack (shows full stack trace, including managed and unmanaged calls)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!do (dump object, including fields) &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Further Information&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q286350"&gt;How to use ADPlus to troubleshoot "hangs" and "crashes"&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/DBGrm.asp"&gt;Production Debugging for .NET Framework Applications&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/03/Bugslayer/"&gt;Mini Dump Snapshots and the New SOS&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://blogs.msdn.com/tess/archive/2005/11/30/498297.aspx"&gt;Tips on Debugging Managed Exceptions with ADPlus and WinDbg&lt;/a&gt;&lt;/p&gt;&lt;img src="http://mattonsoftware.com/aggbug.aspx?PostID=20" width="1" height="1"&gt;</description><category domain="http://mattonsoftware.com/archive/tags/.NET/default.aspx">.NET</category><category domain="http://mattonsoftware.com/archive/tags/Tools/default.aspx">Tools</category><category domain="http://mattonsoftware.com/archive/tags/Debugging/default.aspx">Debugging</category></item></channel></rss>