Launching with your program
To launch the RAD Debugger with your executable and arguments, run raddbg from the command line:
raddbg my_program.exe --foo --bar --baz
A native, user-mode, multi-process, graphical debugger. Currently supports local-machine Windows x64 debugging with PDBs.
To launch the RAD Debugger with your executable and arguments, run raddbg from the command line:
raddbg my_program.exe --foo --bar --baz
| Shortcut | Action |
|---|---|
| Ctrl + O | Open Source Code File |
| F10 | Step Over |
| F11 | Step Into |
| Shift + F11 | Step Out |
| F5 | Run |
| Ctrl + Shift + X / Pause | Halt All Processes |
| Shift + F5 | Kill All Processes |
| Shift + F6 | Attach To Process |
| Ctrl + F | Search For Text (Forwards) |
| F9 | Toggle Breakpoint At Cursor |
| Ctrl + , | Focus Next Panel |
| Ctrl + Shift + , | Focus Previous Panel |
| Ctrl + Alt + Arrow | Focus Panel In Direction |
| Ctrl + Tab | Focus Next Tab |
| Ctrl + Shift + Tab | Focus Previous Tab |
| Ctrl + W | Close Tab |
| F1 | Open Palette |
The debugger stores configuration in two autosaved files:
%appdata%/raddbg/default.raddbg_user%appdata%/raddbg/default.raddbg_projectSwitch paths with Ctrl + Alt + Shift + O (Open User) or Ctrl + Alt + O (Open Project). Missing files are created automatically. If config becomes corrupted, delete the %appdata%/raddbg folder and consider filing a bug report.
Watch tabs evaluate expressions referencing program variables. Some examples:
| Expression | Effect |
|---|---|
array(pointer, 64) | View pointer as a 64-element array |
pointer, count | View pointer as a count-element array |
slice(some_slice_struct) | Interpret struct as base pointer + count |
rows(some_struct, a, b, c) | Show only members a, b, c |
omit(some_struct, a, b, c) | Show all members except a, b, c |
hex(my_int) | Display in hexadecimal |
bin(my_int) | Display in binary |
oct(my_int) | Display in octal |
digits(bin(my_int), 32) | Binary with minimum 32 digits |
bitmap(ptr, w, h, fmt=rgba8) | Visualize as a bitmap image |
Options use a - or -- prefix with arguments separated by : or =. Option parsing stops after a standalone -- or the first non-option argument.
| Option | Description |
|---|---|
--help | Display the help menu |
--user:<path> | Specify user file path (created if missing, autosaved) |
--project:<path> | Specify project file path (created if missing, autosaved) |
--auto_step | Step into all active targets on startup |
--auto_run | Run all active targets on startup |
--quit_after_success / -q | Close after all processes exit with code 0 and no interruptions |
--ipc | Send a command to a running instance, then terminate |
| Command | Interpretation |
|---|---|
raddbg --foo --bar --a:b test.exe | Options configure raddbg; test.exe is the target |
raddbg test.exe --foo --bar | test.exe is the target; --foo --bar are its arguments |
raddbg -- test.exe | test.exe is the target |
raddbg --ipc find_code_location "C:/foo/bar.c:123:1" | Send command to running instance |
Each window is subdivided into non-overlapping panels. Each panel holds multiple tabs, one active at a time. Tabs can be dragged between panels. There are no special windows — everything is freely arrangeable.
| Tab | Description |
|---|---|
| Watch | Editable table for entering and evaluating expressions |
| Locals | Local variables at the selected thread's current location |
| Registers | Register values for the selected thread |
| Globals | All global variables from all loaded modules |
| Thread Locals | All thread-local variables from all loaded modules |
| Types | All types from all loaded modules |
| Procedures | All procedures from all loaded modules |
| Call Stack | Current thread's call stack; select a frame to unwind registers |
| Targets | View and edit all targets |
| Breakpoints | View and edit all breakpoints |
| Watch Pins | View and edit all watch pins |
| Debug Info | All debug info files loaded by the debugger |
| Threads | All threads across all attached processes |
| Processes | All attached processes |
| Machines | All connected machines |
| Modules | All modules in all attached processes |
| File Path Map | Remap debug info source paths to local paths |
| Type Views | Automatic visualization adjustments per type |
Open a tab with the + icon beside a panel's tabs, or with Ctrl + T.
All debugger operations are implemented as commands, accessible via the palette (F1). The textual IDs below are used when driving another instance via --ipc.
| Command | ID | Description |
|---|---|---|
| Launch and Run | launch_and_run | Start a target, then run |
| Launch and Step Into | launch_and_step_into | Start a target, stop at entry point |
| Run | run | Run all targets, starting them if needed |
| Continue | continue | Continue all attached processes |
| Restart | restart | Kill all processes, then relaunch all targets |
| Halt | halt | Halt all attached processes |
| Kill | kill | Kill specified process(es) |
| Kill All | kill_all | Kill all attached processes |
| Detach | detach | Detach from specified process(es) |
| Attach | attach | Attach to a running local process |
| Exit | exit | Exit the debugger |
| Command | ID | Description |
|---|---|---|
| Step Into | step_into | Step once, into function calls |
| Step Over | step_over | Step once, over function calls |
| Step Out | step_out | Run to end of current function |
| Step Into (Assembly) | step_into_inst | Step into at instruction level |
| Step Over (Assembly) | step_over_inst | Step over at instruction level |
| Step Into (Line) | step_into_line | Step into at source line level |
| Step Over (Line) | step_over_line | Step over at source line level |
| Run To Line | run_to_line | Run until a specific source line is hit |
| Set Thread IP | set_thread_ip | Set a thread's instruction pointer to an address |
| Set Next Statement | set_next_statement | Set thread IP to cursor position |
| Command | ID | Description |
|---|---|---|
| Select Thread | select_thread | Select a thread |
| Freeze Thread | freeze_thread | Freeze a thread |
| Thaw Thread | thaw_thread | Thaw a thread |
| Freeze Process | freeze_process | Freeze a process |
| Thaw Process | thaw_process | Thaw a process |
| Freeze Machine | freeze_machine | Freeze a machine |
| Thaw Machine | thaw_machine | Thaw a machine |
| Up One Frame | up_one_frame | Select the call stack frame above current |
| Down One Frame | down_one_frame | Select the call stack frame below current |
| Select Unwind | select_unwind | Select an unwind frame number |
| Command | ID | Description |
|---|---|---|
| Add Line Breakpoint | add_breakpoint | Place a breakpoint at a location |
| Toggle Line Breakpoint | toggle_breakpoint | Place or remove a breakpoint |
| Enable Breakpoint | enable_breakpoint | Enable a breakpoint |
| Disable Breakpoint | disable_breakpoint | Disable a breakpoint |
| Clear Breakpoints | clear_breakpoints | Remove all breakpoints |
| List Breakpoints | list_breakpoints | List all breakpoints |
| Add Watch Pin | add_watch_pin | Place a watch pin at a location |
| Command | ID | Description |
|---|---|---|
| Find Code Location | find_code_location | Jump to a file:line:col location |
| Go To Name | goto_name | Search for a file or symbol and jump to it |
| Go To Line | goto_line | Jump to a line number in the current file |
| Go To Address | goto_address | Jump to an address in memory or disassembly |
| Go To Disassembly | go_to_disassembly | Go to disassembly for a source line |
| Go To Source | go_to_source | Go to source for a disassembly line |
| Find Next | find_next | Search forward for the last searched string |
| Find Previous | find_prev | Search backward for the last searched string |
| Switch To Partner File | switch_to_partner_file | Toggle between header and implementation |
| Command | ID | Description |
|---|---|---|
| Add Target | add_target | Add a new target |
| Select Target | select_target | Select a target |
| Enable Target | enable_target | Enable a target |
| Disable Target | disable_target | Disable a target |
| Remove Target | remove_target | Remove a target |
| Command | ID | Description |
|---|---|---|
| Open New Window | open_window | Open a new debugger window |
| Close Window | close_window | Close a window |
| Toggle Fullscreen | toggle_fullscreen | Toggle fullscreen on the active window |
| Split Panel Left | new_panel_left | Create a panel to the left |
| Split Panel Right | new_panel_right | Create a panel to the right |
| Split Panel Up | new_panel_up | Create a panel above |
| Split Panel Down | new_panel_down | Create a panel below |
| Close Panel | close_panel | Close the active panel |
| Focus Next Panel | next_panel | Cycle active panel forward |
| Focus Previous Panel | prev_panel | Cycle active panel backward |
| Open New Tab | open_tab | Open a new tab |
| Close Tab | close_tab | Close the current tab |
| Duplicate Tab | duplicate_tab | Duplicate the current tab |
| Reset To Default Panel Layout | reset_to_default_panels | Reset window to the default layout |
| Reset To Compact Panel Layout | reset_to_compact_panels | Reset to the compact layout |
| Reset To Simple Panel Layout | reset_to_simple_panels | Reset to the simple layout |
| Command | ID | Description |
|---|---|---|
| Open User | open_user | Load a user file and begin autosaving to it |
| Open Project | open_project | Load a project file and begin autosaving to it |
| Save User | save_user | Save user data to a file |
| Save Project | save_project | Save project data to a file |
| Load Debug Info | load_debug_info | Load a debug info file |
| Unload Debug Info | unload_debug_info | Unload a debug info file |
| Register As JIT Debugger | register_as_jit_debugger | Register as the OS just-in-time debugger |
A target is an executable plus its launch configuration: command line arguments, working directory, optional label, and optional custom entry point function name.
run and kill_all operate only on enabled targets.Add Target command, or pass an executable on the command line.Views control how evaluations are displayed in Watch tabs, using function-call syntax: view_name(expr, args...). Named arguments override defaults, e.g. bitmap(ptr, 512, 256, fmt=bgra8).
| View | Description |
|---|---|
raw(expr) | Ignore all views on expr, including automatic type views |
bin(expr) | Display numeric values in binary (base-2) |
oct(expr) | Display numeric values in octal (base-8) |
dec(expr) | Display numeric values in decimal (base-10) |
hex(expr) | Display numeric values in hexadecimal (base-16) |
digits(expr, num) | Show at least num digits |
no_string(expr) | Disable string visualization on pointers |
no_char(expr) | Disable character visualization |
no_addr(expr) | Disable explicit address display on pointers |
sequence(expr) | Interpret expr as an integer count of sub-expressions |
rows(expr, ...) | Show only the named struct members |
omit(expr, ...) | Show all struct members except the named ones |
range1(expr, min, max) | Express a bounded numeric range; shows slider UI |
array(expr, count) | Treat expr as a pointer to count elements |
slice(expr) | Treat expr as a struct bundling a base pointer + count |
table(expr, ...) | Expand expr normally; use additional args as row cell expressions |
text(expr, [lang=...]) | Visualize expr as text |
disasm(expr, [size=...]) | Visualize expr as disassembled machine code |
memory(expr, [size=...]) | Visualize expr as raw bytes |
bitmap(expr, w, h, [fmt=...]) | Visualize expr as a bitmap image |
color(expr) | Interpret expr as a color and show a color picker |
Breakpoints interrupt execution and can be placed on addresses or source lines. If a source line has no associated code, the nearest next line in the same file is used instead.
Debugger state is persisted across sessions through autosaved, hand-editable text files.
| User File | Project File | |
|---|---|---|
| Default path | %appdata%/raddbg/default.raddbg_user |
%appdata%/raddbg/default.raddbg_project |
| Stores | File path maps, windows, panel layouts, keybindings, theme, fonts | Targets, breakpoints, watch pins, exception code filters |
| Source control | Personal — typically not committed | Project-wide — typically committed |
Because both files share the same format, data can be manually transferred between them by editing the text directly. UI-based transfer is planned.
Launching with --ipc starts a non-graphical instance that sends a single command to a running graphical debugger, then exits. Intended for editors and other external tools.
raddbg --ipc find_code_location "C:/foo/bar/baz.c:123:1"
Available commands are the same as those in the Commands section, referenced by their textual IDs.