dotnet-debugger-dap
0.2.0
dotnet tool install --global dotnet-debugger-dap --version 0.2.0
dotnet new tool-manifest
dotnet tool install --local dotnet-debugger-dap --version 0.2.0
#tool dotnet:?package=dotnet-debugger-dap&version=0.2.0
nuke :add-package dotnet-debugger-dap --version 0.2.0
dotnet-debugger
A debugger for .NET (CoreCLR) that speaks the Debug Adapter Protocol. MIT licensed, written in C# on top of ICorDebug.
Debugs .NET 8, 9 and 10 applications on Windows, Linux and macOS, and .NET Framework 4.x applications on Windows (including old non-SDK projects and their Windows PDBs). 64-bit processes only.
dotnet tool install -g dotnet-debugger-dap
dotnet-debugger --version
Runs on .NET 8 or newer (it rolls forward to whatever runtime is installed). The release archives and the VS Code extension are self-contained and need no .NET at all.
The command talks DAP over stdin/stdout (or TCP with --server[=PORT]), which is what editors expect from a debug adapter.
Neovim (nvim-dap)
local dap = require('dap')
dap.adapters.coreclr = { type = 'executable', command = 'dotnet-debugger' }
dap.configurations.cs = {
{
type = 'coreclr', request = 'launch', name = 'Launch project',
project = '${workspaceFolder}', build = true,
},
}
Any other DAP client
Launch arguments (all optional except one of program / project):
| Field | Meaning |
|---|---|
program |
Path of the .dll or executable to debug |
project |
Project file or directory; the output assembly is found through MSBuild, Properties/launchSettings.json is applied |
build |
Run dotnet build first |
args, cwd, env |
Arguments, working directory, environment (null removes a variable) |
console |
internalConsole (default), integratedTerminal, externalTerminal |
stopAtEntry, justMyCode, enableStepFiltering, allowImplicitFuncEval |
As in other .NET debuggers |
symbolOptions, sourceFileMap |
Symbol servers and path mapping for code built elsewhere |
attach takes processId.
VS Code
Use the dotnet-debugger extension, which bundles this adapter and adds one-click launch commands.
Status
Verified on Windows x64 and Linux x64 with .NET 8, 9 and 10 (in containers the debugger needs
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined). macOS, arm64 and Alpine are built but not verified yet.
Documentation, roadmap and issues: https://github.com/dvislobokov/dotnet-debugger
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
0.2.0
- .NET Framework 4.x on Windows: launch and attach, legacy (non-SDK) projects built with MSBuild.exe, integratedTerminal/externalTerminal, several AppDomains, Windows (full/pdbonly) PDBs, NGen disabled with justMyCode=false.
- 32-bit processes are refused with a plain message (64-bit only).
- Linux/macOS, .NET 8: the adapter no longer hangs after "The debuggee cannot be stopped" while expanding an object.
- Fixes from a black-box DAP probe of 0.1.0: unhandled exceptions always stop, non-ASCII output on Windows, async stepping, long strings, attach errors, paged and capped variables, implicit evaluation timeouts (option allowImplicitFuncEval), robust DAP parsing, expression evaluator additions.
- JetBrains DAP client compatibility: variables filter "named", namedVariables, sorted threads, single terminate, exited -1 for a terminated debuggee.
Full list: https://github.com/dvislobokov/dotnet-debugger/blob/master/CHANGELOG.md