Debugger
Step through Node.js, Python, Go, and .NET code with breakpoints, call stack, and variables.
On this page
The editor includes a minimum-viable debugger built on the Debug Adapter Protocol (DAP). It dispatches Node.js, Python, Go, and .NET configurations to their runtime-specific adapters through the same DAP layer.
Runtimes
type in launch.json | Runtime | Adapter | How Glueprint finds it |
|---|---|---|---|
node, pwa-node | Node.js | VS Code’s js-debug-adapter | PATH, or adapterPath pointing at dapDebugServer.js |
python, debugpy | Python | debugpy under your interpreter | the interpreter from your config, else python3 / python on PATH |
go, delve | Go | dlv dap | PATH, or adapterPath pointing at the dlv binary |
coreclr, dotnet | .NET | netcoredbg | PATH, or adapterPath pointing at the netcoredbg binary |
Prerequisites
Install VS Code’s js-debug-adapter so Glueprint can launch it:
npm install -g @vscode/js-debug
If you want to point at a non-PATH install instead, set adapterPath in your launch entry to the absolute path of dapDebugServer.js.
For .NET on Windows, install netcoredbg with Scoop:
scoop install netcoredbg
On other supported platforms, download the build for your platform from the
netcoredbg releases, unzip
it, and set adapterPath to the absolute path of the binary inside. Keep the
extracted folder intact — netcoredbg needs the managed files next to the
binary.
On macOS, clear the quarantine attribute on the extracted folder first:
xattr -dr com.apple.quarantine <folder>
netcoredbg publishes binaries for Windows x64, Linux x64 and arm64, and macOS Apple Silicon; there is no current published build for Intel macOS.
For .NET launch requests that start a .dll, dotnet must also be on PATH.
Attach requests do not require the dotnet host.
launch.json
Glueprint reads debug configurations from .glueprint/launch.json at the workspace root (not .vscode/launch.json). The schema is the same shape VS Code uses — name, type, request, program, cwd, env, and an optional preLaunchTask that names a task from your task runner.
Your launch.json remains the source of truth for program, cwd, and env.
Glueprint resolves supported deterministic variables such as
${workspaceFolder} before launch. For .NET only, a missing program may be
replaced by the single matching target-framework output described below. If
preLaunchTask is set, the runner runs that task first and only starts the
debugger if it exits cleanly.
Generating .NET configurations
When .glueprint/launch.json has no configurations, the Debug panel offers a
Generate .NET configurations button. Glueprint writes one entry per
runnable, non-test project. When the project declares one literal
TargetFramework, program points at
bin/Debug/<tfm>/<assembly>.dll. Otherwise it points at
bin/Debug/<assembly>.dll. Each entry also gets type: "coreclr",
justMyCode: true, stopAtEntry: false, and a preLaunchTask naming the
project’s own build task — or the solution’s build task when a solution covers
the project — so starting the configuration builds first.
At launch, if program does not exist, Glueprint searches the immediate target
framework directories for the same assembly. Exactly one match is used. If
multiple built target frameworks contain that assembly, the path is ambiguous
and the launch fails until you set program to the one you want. With no match,
build the project first; a hand-written configuration with no preLaunchTask
does not build it for you.
The Debug panel
The debugger UI docks on the right side of the editor and shows:
- A launch picker at the top — the dropdown lists every configuration in your
launch.json. Click one to start a session. - Run state — starting, running, stopped (paused), terminated.
- Call stack — the current threads and their stack frames. Click a frame to jump the editor to its source location.
- Variables — scope-grouped variables (locals, closure, globals). Expand objects to drill in.
- Breakpoints — the list of breakpoints currently set in the workspace.
- Output — adapter and program output.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
F5 | Start session (first config) or continue paused thread |
Shift+F5 | Disconnect the active session |
F9 | Toggle breakpoint at the cursor |
F10 | Step over |
F11 | Step in |
Shift+F11 | Step out |
Shortcuts only fire when an editor surface is focused.
Breakpoints
Click the gutter to the left of a line number to toggle a breakpoint. A red dot marks an active breakpoint. F9 does the same thing for the line at the cursor. Breakpoints persist across debug sessions for the workspace.
Multi-root workspaces
In a multi-root setup (e.g. a monorepo with server/, portal/, etc. as siblings), Glueprint resolves the workspace for a debug session by looking at the active editor tab’s file and walking up to the file-browser root that owns it. Open the file in the workspace you want to debug before pressing F5.
Limits today
- Modern .NET only. Glueprint debugs .NET projects using netcoredbg. SDK-style projects only - .NET Framework, Mono, and Unity projects are not supported.
- Supported product surface. Glueprint supports modern SDK-style C# and F#
projects on .NET 6+ / CoreCLR. It does not support .NET Framework or
non-SDK-style projects, VB project types, C++/CLI (
.vcxproj), Razor or Blazor language intelligence, XAML tooling, or Windows ARM64 builds. - Single-config quick-start.
F5from cold launches the first configuration inlaunch.json. To pick a specific config, use the dropdown in the Debug panel header. - No remote debugging. The adapter runs on the host where Glueprint is running.