WinDBG CDB NTSD SOS Debugging Commands

Download the Debugging Tools First

Download and install Debugging Tools for Windows 32-bit Version. Run WinDbg.exe Or CDB.exe

Command for Help Within WinDBG or CDB

            >.hh [keyword]

Setup Debugging Symbols

Set up symbol path:

            >.sympath c:\windows\symbols;srv*c:\websymbols*http://msdl.microsoft.com/download/symbols
            >.reload
            >!lines
            >!sym noisy
            >x ntdll!*event* search symbols
            >ln [address]

Load SOS to Debug Managed Code

            >sxe ld:mscorjit.dll
            >g
            >.loadby sos mscorwks
            >!name2ee test.exe Test.Main
            >!clrstack

Debugging Commands for Threads

Display threads

            >~

switch to thread #n

            
            >~[n]s

stack trace, kb, kP, kn for detailed stack trace

            
            >kb
            >kP
            >kn

stack trace for all threads

            
            >~*k

SOS Extensions

    
    !eeheap -gc

Take a look at the managed heap

    
    !DumpHeap -stat

Take a look at specific typle by giving it a metadata token, you can get a list of all the objects and their address.

    
    !DumpHeap -mt [MT like 0548cdb4]          

GCRoot Command: !Help gcroot. You can determin why an instance was still rooted and therefore not collectable.

    
    !gcroot [address]          

Dump object command: get internal of an object. It gives some specific information: 1. _target is the object the delegate is holding onto. 2._methodBase is used for dynamic code. 3._methodPtr is the method associated with the instance, or possibly a dynamically generate thunk for static methods. 4._methodPtrAux is used for static methods; this holds the method descriptor and the _methodPtr is dynamically generated block of code to remove this reference. 5._invocationList and _invocationCount are used for Multicast Delegates.

    
    !do [address]          

Get method name: IP2MD. You can use _methodPtr from above.

    
    !ip2md On[address]          

Disassembly code command:

    
    !u On[address]          

Dump data command:

    
    !dd On[address]          

Dump method descriptor in the managed heap:

    
    !dumpmd [address]          

Dump metadata reference:

    
    !dumpmt [address]          

Locate and save Module:

    
    !lm m [name]
    !savemodule [address] [filepathName]          

Use AdPlus to Get Memory Dump

Get memory snapshot of process 2345, using hang mode. Sample:

            adplus -hang -p 2345 -quiet  

Get a memory dump when the process crashes. Sample:

            adplus -crash -pn w3wp -quiet   

Get a memory dump for the process running iis and hosted web applications. Sample:

            adplus -hang -iis -quiet    

Using SOS in Visual Studio

First, you need to right mouse click on the project in solution explorer, choose properties, switch to the Debug tab, and make sure "Enable Unmanaged Code Debugging" is selected.

Second, Open the Immediate window (Debug->Windows->Immediate) and type ".load C:\windows\Microsoft.NET\Framework\v2.0.50727\sos.dll".

Third, Type "!help" for help. Some common commands are listed below:

  
        !CLRStack
        !ip2md [EIP Address]
        !DumpIL [MethodDesc Address]
        !help [Command]

Note:

System.GC.GetTotalMemory

Retrieves the number of bytes currently thought to be allocated. A parameter indicates whether this method can wait a short interval before returning, to allow the system to collect garbage and finalize objects.

Q: Unable to find Immediate window in VS 2005/VS 2008:

A: Go to Tool, Customize select debug immedaite and drag it onto the toolbar. The shortcut Ctrl+Alt+I should bring Immediate Window in debug mode.

See also

  • SQL: Use Dynamic SQL Query Correctly
  • SQL 2005: Use DMV and CROSS APPLY to Get Cached Plans
  • SQL 2005: Discontinued or Deprecated Features in SQL Server 2005
  • SQL 2005: Default Trace Enabled Option
  • SQL 2005: Column Level Permissions
  • SQL 2005: SQLCMD Supports Parameterized Variables and Macro Features
  • SQL 2005: DTS Has Become SSIS now
  • SQL 2005: Microsoft SQL Server 2005 JDBC Driver
  • SQL 2005: Query Notifications in ADO.Net 2.0
  • SQL 2005: Overcome SQL Index Size Limit
  • SQL 2005: DDL Triggers
  • SQL 2005: Why Should Use 64 Bit Now
  • SQL 2005: How to Rebuild The Master Database
  • SQL 2005: A Little Trick to Install SQL 2005 Onto Your Dirty DEV Machine
  • SQL 2005: New Resource Database
  • SQL 2005: Alter Index Rebuild
  • SQL 2005: XQuery Sample
  • SQL 2005: How to Move Database
  • SQL: Use COALESCE to Generate a List
  • SQL: How to Debug SQL Deadlocks
  • .Net: How to Bypass Strong Name Check
  • Agile: Lean Software Development - An Agile Toolkit
  • ORM: How to Use nHibernate 1.2 to Call Stored Procedure to Return a Dataset Without a Mapping Entity
  • AJAX: ASP.NET AJAX Tips
  • .Net: Debugging Commands
  • .Net: How to Run NUnit And Debug Your Test Fixtures Directly from VS 2005
  • .Net: How to Add Domain User to Local Group
  • .Net: Lock Value Type?
  • .Net: How to Create an Instance of a Generic Type with Parameters
  • .Net: How to Get Address of a Managed Type
  • ORM: New Features of nHibernate 1.2
  • .Net: How to Get System Error Message from HRESULT in Managed Code
  • .Net: Use Windows PowerShell Now
  • WMI: Use WMI to Run Commands on Remote Machine
  • API: GetLogicalProcessorInformation to Detect CPUs
  • .Net: How to Implement Singleton Correctly
  • .Net: There is no MTS object context (Exception from HRESULT: 0x8004E004)
  • .Net: The Net Objectives Pattern Repository
  • Web: Access Denied When ASP.Net Accesses Eventlog
  • Nant: Error Loading GUID of Project
  • AJAX: Ajax in Action
  • DTC: DtcGetTransactionManager Fails
  • .Net: Run .Net 1.1 COM+ Serviced Components Under .Net 2.0 Framework
  • .Net: Debugging Managed Code Tip
  • .Net: Assembly Binding Log Viewer (Fuslogvw.exe)
  • .Net: .Net Framework Design Guidelines
  • .Net: Use Global Catalog and CheckTokenMembership to Check AD Group Membership



  • THIS POST IS PROVIDED "AS-IS" WITH NO WARRANTIES AND CONFERS NO RIGHTS. Build time: Thu 12/18/2008 . ©2007 Dalun Software. All rights reserved. Back to Article List