12. Settings and commands reference
Everything configurable, in one place. The chapters explain what these do; this page is for looking one up.
The debug type
| Type id | delphi-win64 — used for 32-bit targets too; it was never renamed when Win32 support shipped, so existing configurations keep working |
| Label | Delphi (Win32/Win64) |
| Languages | objectpascal, pascal; breakpoints also work in files typed as delphi |
| Extension | delphi-win64-debug, publisher local |
Launch configuration
| Property | Type | Default | Notes |
|---|---|---|---|
program | string | required | Path to the .exe to debug |
mapFile | string | same path as program, .map | Delphi MAP file |
rsmFile | string | same path, .rsm | Needed for local variable inspection |
sourceRoot | string | empty | Root directory for source lookup |
sourceSearchPaths | string[] | empty | Extra source directories, each searched two levels deep |
args | string[] | empty | Command-line arguments for the debuggee |
stopAtEntry | boolean | false | Break at the process entry point before any user code runs |
rawStackScan | boolean | false | Opt-in brute-force stack sweep fallback — chapter 6 |
modules | object[] | empty | { name (required), map, rsm, dcp } — pre-binds debug info for runtime-loaded DLLs and BPLs |
delphiProjectFile | string | empty | The .dpr/.dpk/.dproj this configuration debugs, written automatically by the IDE plugin. Enables the two project-scoped tiers in exception rules. |
useGlobalExceptionRules | boolean | true | Also load the shared machine-wide rules file |
globalExceptionRulesPath | string | %USERPROFILE%\.DelphiWinDebugger\exceptionRules.json | Override the shared rules file location |
progressLocation | "statusBar" | "notification" | "statusBar" | Where long operations report progress |
diagnosticLog | boolean | false | Writes %TEMP%\dap_adapter.log. Very verbose. Also enabled by the DAP_LOG=1 environment variable. |
diagnosticsLocation | "outputChannel" | "debugConsole" | "outputChannel" | Where the debugger’s own messages go |
Attach configuration
Adds the following. program, mapFile, rsmFile,
sourceRoot, sourceSearchPaths, modules,
delphiProjectFile, useGlobalExceptionRules,
globalExceptionRulesPath, rawStackScan,
progressLocation, diagnosticLog and
diagnosticsLocation all work as they do for launch.
stopAtEntry and args are the two that do not — and
they are absent from the attach schema rather than silently ignored, because both only
mean something for a process the debugger starts itself.
| Property | Type | Default | Notes |
|---|---|---|---|
processId | number or string | — | PID to attach to. Use "${command:delphi-win64.pickProcess}" to pick interactively. |
processName | string | — | Executable name, e.g. "MyApp.exe" |
killOnDetach | boolean | false | Detaching leaves the process running by default |
Exception rules
Not a launch.json property — rules live in up to three JSON files (per-project
local, per-project shared, machine-wide), never in the launch configuration itself. See
where rules live for the files and
their precedence. Within any of them, the shape below is the same: an ordered array, first
match wins, each rule a flat object of optional criteria plus a required
action. Criteria present in a rule are AND-ed; omitted criteria are wildcards.
Chapter 4 explains the behaviour.
| Key | Type | Matches |
|---|---|---|
class | string | string[] | Runtime (leaf) class, exact, case-insensitive |
classIs | string | string[] | Runtime class or any ancestor |
code | string | integer | array | Win32 exception code, hex or decimal. The only criterion that matches native exceptions. |
message | string | Case-insensitive substring of the message |
messageRegex | string | Case-insensitive regular expression against the message |
unit | string | Raise-site unit by basename; "*unknown*" for no resolvable location |
line | integer | Single raise-site line; seeds both range bounds |
lineFrom / lineTo | integer | Inclusive raise-site line range |
action | string | Required. ignore, log, logStack or break |
Exception filters — delphi, av, all,
unhandled — are a different thing with no launch.json field of
their own: set them in the BREAKPOINTS view, or by an agent over MCP through
delphiExceptionClasses on launch_debuggee,
attach_from_config or set_exception_filters. The
delphi filter narrows to specific classes with that same argument (or the GUI
pencil’s condition field) — a comma- or semicolon-separated allowlist.
Defaults are delphi, av and unhandled.
Commands
Twelve commands, all in the Delphi Debugger category — so in the Command
Palette (Ctrl+Shift+P) they read
Delphi Debugger: Edit Exception Rules… and so on. Four of them are
deliberately not in the palette, because they only make sense on the thing you
clicked; those are marked below.
| Command | Where it lives | In palette |
|---|---|---|
| Edit Exception Rules… | Title bar of the Breakpoints and Call Stack views | yes |
| Create a Rule for This Exception… | The floating debug toolbar — only while stopped on an exception | yes, same condition |
| Toggle Raw Stack Scan | Call Stack view title bar | yes |
| Refresh Modules | Delphi Modules view title bar | yes |
| Filter Modules… | Delphi Modules view title bar | yes |
| Clear Module Filter | Delphi Modules view title bar, once a filter is set | yes |
| View Memory (Delphi) | Hover icon on a row in the Variables or Watch view — not in the right-click menu | yes |
| Always Evaluate This Property (Delphi) | Right-click a row in Variables or Watch | no |
| Never Auto-Evaluate This Property (Delphi) | Right-click a row in Variables or Watch | no |
| Forget Evaluation Decision (Delphi) | Right-click a row in Variables or Watch — undoes a previous allow or deny | no |
| Copy Path | Hover icon on a module row in the Delphi Modules view | no |
| Pick a Process to Attach To | Only as ${command:delphi-win64.pickProcess} in an attach configuration | no |
Extension settings
| Setting | Type | Default | What it does |
|---|---|---|---|
delphi-win64.stockMemoryView | boolean | false |
Also show VS Code’s built-in hex pane alongside the extension’s own memory view |
delphi-win64.checkForUpdates | boolean | true |
Daily check of GitHub releases, with a download-link notification. Fails silently when offline. |
Keyboard
Standard VS Code debug bindings; nothing is remapped.
F5 | Start / Continue |
F10 | Step over |
F11 | Step into |
Shift+F11 | Step out |
Ctrl+Shift+D | Open the Run and Debug view |