The RAD Debugger ALPHA

A native, user-mode, multi-process, graphical debugger. Currently supports local-machine Windows x64 debugging with PDBs.


Getting Started

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

Basic Keybindings

ShortcutAction
Ctrl + OOpen Source Code File
F10Step Over
F11Step Into
Shift + F11Step Out
F5Run
Ctrl + Shift + X / PauseHalt All Processes
Shift + F5Kill All Processes
Shift + F6Attach To Process
Ctrl + FSearch For Text (Forwards)
F9Toggle Breakpoint At Cursor
Ctrl + ,Focus Next Panel
Ctrl + Shift + ,Focus Previous Panel
Ctrl + Alt + ArrowFocus Panel In Direction
Ctrl + TabFocus Next Tab
Ctrl + Shift + TabFocus Previous Tab
Ctrl + WClose Tab
F1Open Palette

Configuration Files

The debugger stores configuration in two autosaved files:

  • User file — windows, keybindings, theme. Default: %appdata%/raddbg/default.raddbg_user
  • Project file — targets, breakpoints, recent files. Default: %appdata%/raddbg/default.raddbg_project

Switch 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 & Visualizers

Watch tabs evaluate expressions referencing program variables. Some examples:

ExpressionEffect
array(pointer, 64)View pointer as a 64-element array
pointer, countView 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

Command-Line Usage

Options use a - or -- prefix with arguments separated by : or =. Option parsing stops after a standalone -- or the first non-option argument.

OptionDescription
--helpDisplay the help menu
--user:<path>Specify user file path (created if missing, autosaved)
--project:<path>Specify project file path (created if missing, autosaved)
--auto_stepStep into all active targets on startup
--auto_runRun all active targets on startup
--quit_after_success / -qClose after all processes exit with code 0 and no interruptions
--ipcSend a command to a running instance, then terminate

Examples

CommandInterpretation
raddbg --foo --bar --a:b test.exeOptions configure raddbg; test.exe is the target
raddbg test.exe --foo --bartest.exe is the target; --foo --bar are its arguments
raddbg -- test.exetest.exe is the target
raddbg --ipc find_code_location "C:/foo/bar.c:123:1"Send command to running instance

Windows, Panels & Tabs

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.

Available Tab Interfaces

TabDescription
WatchEditable table for entering and evaluating expressions
LocalsLocal variables at the selected thread's current location
RegistersRegister values for the selected thread
GlobalsAll global variables from all loaded modules
Thread LocalsAll thread-local variables from all loaded modules
TypesAll types from all loaded modules
ProceduresAll procedures from all loaded modules
Call StackCurrent thread's call stack; select a frame to unwind registers
TargetsView and edit all targets
BreakpointsView and edit all breakpoints
Watch PinsView and edit all watch pins
Debug InfoAll debug info files loaded by the debugger
ThreadsAll threads across all attached processes
ProcessesAll attached processes
MachinesAll connected machines
ModulesAll modules in all attached processes
File Path MapRemap debug info source paths to local paths
Type ViewsAutomatic visualization adjustments per type

Open a tab with the + icon beside a panel's tabs, or with Ctrl + T.


Commands

All debugger operations are implemented as commands, accessible via the palette (F1). The textual IDs below are used when driving another instance via --ipc.

Execution

CommandIDDescription
Launch and Runlaunch_and_runStart a target, then run
Launch and Step Intolaunch_and_step_intoStart a target, stop at entry point
RunrunRun all targets, starting them if needed
ContinuecontinueContinue all attached processes
RestartrestartKill all processes, then relaunch all targets
HalthaltHalt all attached processes
KillkillKill specified process(es)
Kill Allkill_allKill all attached processes
DetachdetachDetach from specified process(es)
AttachattachAttach to a running local process
ExitexitExit the debugger

Stepping

CommandIDDescription
Step Intostep_intoStep once, into function calls
Step Overstep_overStep once, over function calls
Step Outstep_outRun to end of current function
Step Into (Assembly)step_into_instStep into at instruction level
Step Over (Assembly)step_over_instStep over at instruction level
Step Into (Line)step_into_lineStep into at source line level
Step Over (Line)step_over_lineStep over at source line level
Run To Linerun_to_lineRun until a specific source line is hit
Set Thread IPset_thread_ipSet a thread's instruction pointer to an address
Set Next Statementset_next_statementSet thread IP to cursor position

Threads & Processes

CommandIDDescription
Select Threadselect_threadSelect a thread
Freeze Threadfreeze_threadFreeze a thread
Thaw Threadthaw_threadThaw a thread
Freeze Processfreeze_processFreeze a process
Thaw Processthaw_processThaw a process
Freeze Machinefreeze_machineFreeze a machine
Thaw Machinethaw_machineThaw a machine
Up One Frameup_one_frameSelect the call stack frame above current
Down One Framedown_one_frameSelect the call stack frame below current
Select Unwindselect_unwindSelect an unwind frame number

Breakpoints

CommandIDDescription
Add Line Breakpointadd_breakpointPlace a breakpoint at a location
Toggle Line Breakpointtoggle_breakpointPlace or remove a breakpoint
Enable Breakpointenable_breakpointEnable a breakpoint
Disable Breakpointdisable_breakpointDisable a breakpoint
Clear Breakpointsclear_breakpointsRemove all breakpoints
List Breakpointslist_breakpointsList all breakpoints
Add Watch Pinadd_watch_pinPlace a watch pin at a location

Navigation

CommandIDDescription
Find Code Locationfind_code_locationJump to a file:line:col location
Go To Namegoto_nameSearch for a file or symbol and jump to it
Go To Linegoto_lineJump to a line number in the current file
Go To Addressgoto_addressJump to an address in memory or disassembly
Go To Disassemblygo_to_disassemblyGo to disassembly for a source line
Go To Sourcego_to_sourceGo to source for a disassembly line
Find Nextfind_nextSearch forward for the last searched string
Find Previousfind_prevSearch backward for the last searched string
Switch To Partner Fileswitch_to_partner_fileToggle between header and implementation

Targets

CommandIDDescription
Add Targetadd_targetAdd a new target
Select Targetselect_targetSelect a target
Enable Targetenable_targetEnable a target
Disable Targetdisable_targetDisable a target
Remove Targetremove_targetRemove a target

Windows & Panels

CommandIDDescription
Open New Windowopen_windowOpen a new debugger window
Close Windowclose_windowClose a window
Toggle Fullscreentoggle_fullscreenToggle fullscreen on the active window
Split Panel Leftnew_panel_leftCreate a panel to the left
Split Panel Rightnew_panel_rightCreate a panel to the right
Split Panel Upnew_panel_upCreate a panel above
Split Panel Downnew_panel_downCreate a panel below
Close Panelclose_panelClose the active panel
Focus Next Panelnext_panelCycle active panel forward
Focus Previous Panelprev_panelCycle active panel backward
Open New Tabopen_tabOpen a new tab
Close Tabclose_tabClose the current tab
Duplicate Tabduplicate_tabDuplicate the current tab
Reset To Default Panel Layoutreset_to_default_panelsReset window to the default layout
Reset To Compact Panel Layoutreset_to_compact_panelsReset to the compact layout
Reset To Simple Panel Layoutreset_to_simple_panelsReset to the simple layout

User, Project & Debug Info

CommandIDDescription
Open Useropen_userLoad a user file and begin autosaving to it
Open Projectopen_projectLoad a project file and begin autosaving to it
Save Usersave_userSave user data to a file
Save Projectsave_projectSave project data to a file
Load Debug Infoload_debug_infoLoad a debug info file
Unload Debug Infounload_debug_infoUnload a debug info file
Register As JIT Debuggerregister_as_jit_debuggerRegister as the OS just-in-time debugger

Targets

A target is an executable plus its launch configuration: command line arguments, working directory, optional label, and optional custom entry point function name.


Views

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).

ViewDescription
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

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.


User & Project Files

Debugger state is persisted across sessions through autosaved, hand-editable text files.

User FileProject 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.


Driving Another Debugger Instance

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.