WinDBG Quick Reference
Contents
References
Tasks
Debuggee control:
- go:
g
- detach:
.detach
- break: press
<ctrl-break/pause>
Load sos extension
.loadby sos clr
For details about loading SOS, refer here and the following section on failure to load SOS.
List CLR stack
!CLRStack
Inspect objects (sos)
!DumpHeap
!DumpObj
!DumpArray
!DumpClass
Break on (first chance) exceptions. See sxe doc, "Event Definitions and Defaults".
sxe <eh|clr|...>
Inspect an exception (sos):
!PrintException <exception_address>
.dump /mA
Symbol debugging:
!sym noisy
.reload
Failure Loading SOS
Sometimes loading SOS can fail when debugging dumps:
0:009> .cordll -ve -u -l
CLRDLL: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscordacwks.dll:4.7.2115.00 f:8
doesn't match desired version 4.7.2117.00 f:8
CLRDLL: Unable to find mscordacwks_AMD64_AMD64_4.7.2117.00.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_AMD64_AMD64_4.7.2117.00.dll' on the path
CLRDLL: Unable to find clr.dll by search
Cannot Automatically load SOS
CLRDLL: ERROR: Unable to load DLL mscordacwks_AMD64_AMD64_4.7.2117.00.dll, Win32 error 0n2
CLRDLL: Consider using ".cordll -lp <path>" command to specify .NET runtime directory.
CLR DLL status: ERROR: Unable to load DLL mscordacwks_AMD64_AMD64_4.7.2117.00.dll, Win32 error 0n2
That's because the dump is collected from a machine that has different CLR version. The best way to solve this is to copy the following DLLs from the target machine and use them to load SOS:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
Put them under d:\share
, and in WinDbg load with:
0:009> .cordll -lp d:\share
CLRDLL: Loaded DLL d:\share\mscordacwks.dll
Automatically loaded SOS Extension
CLR DLL status: Loaded DLL d:\share\mscordacwks.dll
Here are some useful doc:
- loading SOS: diagnostic loading SOS
- loading SOS for different CLR version (SO)