Once installed, set
the _NT_SYMBOL_PATH
environment variable. I also recommend that
you add the Windbg installation directory to your PATH
.
If you're feeling ambitious, you could grab this file and save it to a location that is easy to type. You'll need to type its path when you try to load it later.
cdb
for text mode debugging or windbg
for GUI-p <pid>
command line option.
-z <path-to-dump>
to examine a minidump
-o
to debug multiple processes with a single debugger
Command | gdb | windbg | windbg keyboard accelerator | windbg toolbar button | notes |
---|---|---|---|---|---|
Continue Execution | c |
g |
F5 | ||
Set breakpoint (address) | break <address> |
bp <address> |
|||
Set breakpoint (unresolved symbol) | break <location> |
bu <location> |
|||
Set breakpoint (source line) | break <source line> |
bp `<source line>` |
F9 at caret location | (toggle) | |
Set watchpoint | watch/rwatch/awatch |
ba w/r/r |
|||
Step over | next |
p |
F10 | ||
Step into | step |
t |
F11 | ||
Step out | finish |
gu |
Shift + F11 | ||
List breakpoints | info breakpoints |
bl |
|||
Disable breakpoint | disable |
bd |
|||
Enable breakpoint | enable |
be |
|||
Clear breakpoint | clear |
bc |
F9 at caret location | (toggle) | |
Run to location | advance |
pa |
F7 at caret location | ||
Current Thread Backtrace | bt |
k |
Alt + 6 | ||
Switch non-volatile register context to frame | f <frame number> |
.frame /r /c <frame number> |
|||
List so/dll | info sharedlibrary |
lm |
|||
List processes | |* |
Alt + 9 | |||
List threads | info threads |
~* |
Alt + 9 | ||
Switch current thread | thread <thread number> |
~<thread number> s |
|||
Break on .so/.dll load | catch load <regex> |
sxe ld:<module> |
|||
Ignore signal/exception | handle <signal> nostop |
sxd av |
|||
Load symbols for module | add-symbol-file |
.reload <module> |
|||
Local variables in current stack frame | info locals |
dv |
Alt + 3 | ||
Arguments for current stack frame | info args |
kb 1 |
|||
Symbol lookup | info (functions|variables) <regexp> |
x <module!symbol> |
May use * and ? as glob-style wildcards |
||
Registers | info registers |
r |
Alt + 4 |
|. |
Current process |
|# |
Faulting process |
|* |
All processes |
|<index> |
Process at index |
|~<pid> |
Process by ID |
Note that this syntax is identical to thread syntax except for the fact that it uses |
instead of ~
~. |
Current thread |
~# |
Faulting thread |
~* |
All threads |
~<index> |
Thread at index |
~~<tid> |
Thread by ID |
Note that this syntax is identical to process syntax except for the fact that it uses ~
instead of |
This syntax may be used as a prefix to restrict the scope of certain subcommands:
Command | Description |
---|---|
f |
Freeze thread |
u |
Thaw thread |
s |
Switch current thread |
~0 bp <address> |
Set a breakpoint to fire only for the main thread |
WARNING: Some thread subcommands may use the same abbreviation as regular commands but have a significantly different meaning!
Example: Freeze all threads except for main thread
~* f
~0 u
(The f
command is "fill memory" in non-thread command contexts)
Command | Description |
---|---|
!gle |
Get the current thread's "last error" value (Win32 errno ) |
!error <code> |
Look up the human-readable description of error code |
!sym noisy |
Debug logging for symbol resolver |
!sym quiet |
Revert to quiet symbol resolution |
!wow64exts.sw |
Switch between 32-bit and 64-bit modes (Windbg 64-bit only) |
.nvload <path-to-natvis-file> |
Load natvis definitions (requires WinDbg 10) |
.dump /mfh <path-to-dump-file> |
Save current debugging state to minidump |
!analyze -hang -v |
Query the kernel to find out why the currently selected thread is hung |
There are three expression evaluators: MASM, C++ and NatVis. MASM is the default. To change the default, see the .expr
command.
NatVis is only available with the dx
command (see below).
You can also override on a per-expression basis by wrapping your expression with @@masm(...)
or @@c++(...)
.
To immediately evaluate an expression on the command line, use ?
for MASM or ??
for C++. References to register names must be prefixed by @
. For example:
?? (@eax + 0n15)
Prints the value of eax
+ 15 (Use 0n
prefix for decimal literals)
Old and busted: dt <module!name> <address>
New hotness (WinDbg 10): dx <C++ expression>
.nvload
command to load visualizers.