This page serves as a general debugging reference page. It provides usage information for each debugger command. If you're more interested in debugging tutorials, try one of our Debug Challenges. Even if you're not up for a challenge, they serve as a fun way to learn the basics of kernel and user mode debugging on Minoca OS.

Ctrl+B is used to break into the GUI debugger.

Ctrl+C is used to break into the command line debugger.

Command Description
bp <address> Create a Break Point: this command sets a breakpoint at a given memory <address>. This can either be a raw memory address (e.g. "bp 0x80000000") or a function name (e.g. "bp KeClockInterrupt").
bl List Break Points: this command lists all current break points registered with the debugger, including enabled and disabled break points.
be N Enable Break Point: this command enables the break point that corresponds to the break point index N. The bl command can be used to get the indices.
bd N Disable Break Point: this command disables the break point that corresponds to the break point index N. The bl command can be used to get the indices.
bc [ N | * ] Clear Break Point: this command can clear one or all break points that are registered with the debugger. Use "bc *" to clear all and "bc N" to clear the N‑th break point.
Command Description
q Quit: this command quits the debugger.
g
g <address>
Go: this command continues execution. It can either continue execution until the next break or continue until a specific address is reached.
gu Go Up: this command continues execution until the calling function is reached.
p Step Over: this command executes the next instruction, stepping over any call instructions.
t Step Into: this command executes the next instruction, stepping into any call instructions.
ss [ on | off ] Source Line: this command enables or disables stepping by source line. This is enabled by default. The debugger steps by assembly instruction when disabled.
Command Description
r
r <reg>
r <reg> <value>
This commend gets or sets register values. If no arguments are supplied, then all registers are displayed. If a specific register is supplied, its value is displayed. If a register and a value are supplied, then the register is updated with the given value.
rs
rs <sreg>
rs <sreg> <value>
This commend gets or sets special register values. If no arguments are supplied, then all special registers are displayed. If a specific special register is supplied, its value is displayed. If a special register and a value are supplied, then the register is updated with the given value.
Command Description
db
db [‑cN] [‑lM] [‑p] <address>
Dump Byte: this command dumps memory one byte (8-bits) at a time from either a given address or where the last memory dump command left off. ‑lM indicates that M bytes should be displayed. ‑cN indicates that the bytes should be displayed in N columns.
dw
dw [‑cN] [‑lM] [‑p] <address>
Dump Word: this command dumps memory one word (16-bits) at a time from either a given address or where the last memory dump command left off. ‑lM indicates that M words should be displayed. ‑cN indicates that the words should be displayed in N columns.
dd
dd [‑cN] [‑lM] [‑p] <address>
Dump Double Words: this command dumps memory two words (32-bits) at a time from either a given address or where the last memory dump command left off. ‑lM indicates that M double-words should be displayed. ‑cN indicates that the double-words should be displayed in N columns.
dq
dq [‑cN] [‑lM] [‑p] <address>
Dump Quad Words: this command dumps memory four words (64-bits) at a time from either a given address or where the last memory dump command left off. ‑lM indicates that M quad-words should be displayed. ‑cN indicates that the quad-words should be displayed in N columns.
dc
dc [‑cN] [‑lM] [‑p] <address>
Dump Characters: this command dumps memory one character (8-bits) at a time from either a given address or where the last memory dump command left off. ‑lM indicates that M characters should be displayed. ‑cN indicates that the characters should be displayed in N columns.
dps
dps <address>
Dump Pointer Symbols: this command dumps memory one pointer value at a time, displaying the symbols that match any of the dumped pointers. If no address is supplied, it dumps pointers picking up from where it left off. It is useful for looking at a trap frame's stack.
Command Description
eb <address> <value> Edit Byte: this command updates one byte (8-bits) of memory at the given address with the given value.
ew <address> <value> Edit Word: this command updates one word (16-bits) of memory at the given address with the given value.
ed <address> <value> Edit Double Word: this command updates two words (32-bits) of memory at the given address with the given value.
eq <address> <value> Edit Quad Word: this command updates four words (64-bits) of memory at the given address with the given value.
Command Description
dt <type> Dump Type: this command dumps the members or values of a given type. This is useful for determining the members or total size of a structure or the values of an enum.
dt <type> <address > ... Dump Type at Address: this command dumps the memory at one or more addresses, interpreting the memory as the given type. It pretty-prints the type information.
dt <variable> Dump Variable: this command dumps the data for the given variable, pretty-printing the information by automatically determining the type. This works for both global and local variables.
dl <address> <type> [<entry name>] Dump List: this command dumps all the entries of a linked list starting at the given address. The default <entry name> is "ListEntry". The <address> can also be a variable name (e.g. "dl MmPhysicalSegmentListHead _PHYSICAL_MEMORY_SEGMENT ListEntry").
dv Dump Variables: this command dumps all of the local variables for the current routine. Be aware that the values for register based variables may not be accurate when observing higher stack frames.
Command Description
k Call Stack: this command prints the current call stack.
kn Numbered Call Stack: this command prints the current call stack with the frame numbers displayed.
frame N Change Frame: this command changes to the N‑th call stack frame. The number can be acquired from the "kn" command.
Command Description
u
u <address>
u <function name>
Disassemble: this command disassembles instructions at the current or specified address. A function name can also be given with an optional offset (e.g. "u KeClockInterrupt+0x28").
Command Description
~ Processor/Thread Count: this command displays the number of processors in the system. In the user mode debugger, this command displays the number of threads.
~N Switch Processor/Thread: this command switches focus to the N‑th processor. Processors are indexed starting at 0. In the user mode debugger, this command switches threads.
proc Print Processor Block: this command prints the processor block structure for the processor currently in focus. It is only available in kernel mode debugging.
Command Description
sympath
sympath <path>
Get or Set Sympath: this command gets or sets the symbol path. When setting, this takes a semi-colon separated list of absolute file paths.
sympath+ <path> Append Sympath: this command appends the given path to the symbol path. This takes a semi-colon separated lists of absolute file paths.
reload Reload Sympath: ths command reloads the symbols based on the current symbol path.
x <query> Search Symbols: this command searches for a symbol by name. The "*" character can be used one or more times as a wildcard. For example, "x kernel!*" will report all symbols in the kernel module.
Command Description
srcpath
srcpath <path>
Get or Set Source Path: this command gets or sets the debugger's source path. When setting, this takes a semi-colon separated list of absolute file paths.
srcpath+ <path> Append Source Path: this command appends the given path to the source path. This takes a semi-colon separated lists of absolute file paths.
sl [ on | off ] Source Line Information: this command enables or disables printing source line information for each symbol address. This is disabled by default.
so <address>
so <function name>
Show Source: this command shows the source at the given address or for the given address in the GUI debugger's source window.

Please see the detailed tutorial about using and enabling kernel profiling for more information.

Command Description
profile stack start This command starts displaying stack profiling data in the GUI debugger's profiling window. Note that stack profiling must be enabled for this to have an effect.
profile stack stop This command stops displaying stack profiling data in the GUI debugger's profiling window.
profile stack clear This command clears the debugger's history of previously collected stack profiling data.
profile stack dump This command dumps the current stack profiling data out to the debug console.
profile stack threshold <percentage> This commands sets a percentage of total hits that a stack entry must reach in order to be displayed in the profiling output.
profile memory start This command starts displaying memory profiling data in the GUI debugger's profiling window. Note that memory profiling must be enabled for this to have an effect.
profile memory stop This command stops displaying memory profiling data in the GUI debugger's profiling window.
profile memory delta This command makes memory profiling only display the differences in allocations from a current snap of the memory data.
profile memory clear This command clears the debugger's history of previously collected memory profiling data.
profile thread clear This command clears the debugger's history of previously collected thread profiling data.
profile thread list This command displays a summary of all process and thread profiling data to the debugger console.
profile thread contextswaps This command displays thread context swap event data to the debug console. An optional list of thread ID's can be provided at the end of the argument list to limit output.
profile thread blockingobjects This command dumps a list of objects that threads are waiting on, sorted by the number of times an object has been blocked on. An optional list of thread ID's can be provided to limit the output to objects that have been blocked on by the given list of threads.
Command Description
reboot This command instantly reboots the system. All data that has not been written to disk will be lost.
help This command displays a list of debugger commands in the debug console.
? <expression> This command evaluates the given expression. This can be useful for quick calculations in the debugger. For example, "? 0x400+0n800" adds 400 hex to 800 decimal and displays the result in both hex and decimal. Multiply, divide, addition, and subtraction work.
Command Description
load <path> This command loads a debugger extension at the given absolute file path.
unload *
unload <path>
This command can either unload all debugger extensions using "*" or the debugger extension loaded from the given path.