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    

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:

A: Go to Tool, Customize select debug immedaite and drag it onto the toolbar.

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: Sun 03/30/2008 . ©2007 Dalun Software. All rights reserved. Back to Article List