├── _includes ├── cookie_notice.html ├── js_files.html ├── head.html ├── topnav.html └── footer.html ├── img ├── node-repl.gif ├── with-DAP.png ├── breakpoint.png ├── java-threads.png ├── without-DAP.png ├── microsoft-logo.png ├── python-inline-values.gif ├── microsoft-logo-inverted.png ├── stop-continue-terminate.svg └── init-launch.svg ├── .gitignore ├── webfonts ├── fa-solid-900.eot ├── fa-solid-900.ttf ├── fa-brands-400.eot ├── fa-brands-400.ttf ├── fa-brands-400.woff ├── fa-regular-400.eot ├── fa-regular-400.ttf ├── fa-solid-900.woff ├── fa-solid-900.woff2 ├── fa-brands-400.woff2 ├── fa-regular-400.woff └── fa-regular-400.woff2 ├── diagrams ├── package.json ├── build.mjs ├── init-launch.mmd └── stop-continue-terminate.mmd ├── .vscode ├── settings.json └── launch.json ├── 404.html ├── _layouts ├── default.html ├── singlePage.html ├── implementors.html └── specification.html ├── spec-generator ├── tsconfig.json ├── package.json ├── package-lock.json ├── json_schema.d.ts └── generator.ts ├── Gemfile ├── .github └── workflows │ └── branch-policy.yml ├── .devcontainer └── devcontainer.json ├── License-code.txt ├── js └── page.js ├── _config.yml ├── README.md ├── _implementors ├── sdks.md ├── tools.md └── adapters.md ├── SECURITY.md ├── contributing.md ├── index.html ├── _data └── specification-toc.yml ├── css └── main.scss ├── Gemfile.lock ├── License.txt ├── overview.md └── changelog.md /_includes/cookie_notice.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /img/node-repl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/node-repl.gif -------------------------------------------------------------------------------- /img/with-DAP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/with-DAP.png -------------------------------------------------------------------------------- /img/breakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/breakpoint.png -------------------------------------------------------------------------------- /img/java-threads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/java-threads.png -------------------------------------------------------------------------------- /img/without-DAP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/without-DAP.png -------------------------------------------------------------------------------- /img/microsoft-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/microsoft-logo.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | _site 3 | **/node_modules 4 | spec-generator/out 5 | .gitignore 6 | .jekyll-metadata 7 | -------------------------------------------------------------------------------- /webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /img/python-inline-values.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/python-inline-values.gif -------------------------------------------------------------------------------- /webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /img/microsoft-logo-inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/HEAD/img/microsoft-logo-inverted.png -------------------------------------------------------------------------------- /diagrams/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "build": "node build.mjs" 4 | }, 5 | "dependencies": { 6 | "@mermaid-js/mermaid-cli": "^11.2.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "git.branchProtection": [ 3 | "main", 4 | "gh-pages" 5 | ], 6 | "git.branchProtectionPrompt": "alwaysCommitToNewBranch", 7 | } -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |The page you are looking for cannot be found.
7 |14 | The Debug Adapter Protocol (DAP) defines the abstract protocol used between a development tool (e.g. IDE or editor) and a debugger. 15 |
16 | 17 |82 | The protocol defines the format of the messages sent using JSON between the development tool and the debug adapter. 83 |
84 |89 | The latest version of the protocol specification is version 1.70.0. 90 |
91 |92 | Change History 93 |
94 |100 | The DAP has been implemented for many debuggers or runtimes and some development tools are hosting these debug adapters. 101 |
102 |(.*)<\/code>/g, "'$1'");
270 | const ind = indent();
271 | return `${ind}/**` + breakLines('\n' + description, ' ', ` * `) + `\n${ind} */\n`;
272 | }
273 | }
274 | return '';
275 | }
276 |
277 | function breakLines(s: string, breakPat: string, lineStart: string): string {
278 | s = s.replace(/\n/g, `${breakPat}@@@${breakPat}`); // preserve newlines as a special word
279 | let ind = `${indent()}${lineStart}`;
280 | const result: string[] = [];
281 | const words= s.split(breakPat);
282 | let line = '';
283 | for (let w of words) {
284 |
285 | if (w === '@@@') {
286 | // force a new line
287 | result.push(line);
288 | line = '';
289 | continue;
290 | }
291 |
292 | if (ind.length + line.length + w.length + 1 > MAX_LINE_LENGTH) {
293 | // word doesn't fit into line: start a new line
294 | result.push(line);
295 | line = '';
296 | }
297 |
298 | if (line.length > 0) {
299 | line += breakPat;
300 | }
301 | line += w;
302 | }
303 | if (line.length > 0) {
304 | result.push(line);
305 | }
306 | return result.map(l => l.trimEnd()).join(`\n${ind}`);
307 | }
308 |
309 | function openBlock(str: string, openChar?: string, indent?: boolean): string {
310 | indent = typeof indent === 'boolean' ? indent : true;
311 | openChar = openChar || ' {';
312 | let s = line(`${str}${openChar}`, true, indent);
313 | numIndents++;
314 | return s;
315 | }
316 |
317 | function closeBlock(closeChar?: string, newline?: boolean): string {
318 | newline = typeof newline === 'boolean' ? newline : true;
319 | closeChar = closeChar || '}';
320 | numIndents--;
321 | return line(closeChar, newline);
322 | }
323 |
324 | function propertyType(prop: any): string {
325 | if (prop.$ref) {
326 | return getRef(prop.$ref);
327 | }
328 | if (Array.isArray(prop.oneOf)) {
329 | return (prop.oneOf as any[]).map(t => propertyType(t)).join(' | ')
330 | }
331 | switch (prop.type) {
332 | case 'array':
333 | const s = propertyType(prop.items);
334 | if (s.indexOf(' ') >= 0) {
335 | return `(${s})[]`;
336 | }
337 | return `${s}[]`;
338 | case 'object':
339 | return objectType(prop);
340 | case 'string':
341 | if (prop.enum) {
342 | return breakLines(enumAsOrType(prop.enum), ' | ', ` | `);
343 | } else if (prop._enum) {
344 | return breakLines(enumAsOrType(prop._enum, true), ' | ', ` | `);
345 | }
346 | return `string`;
347 | case 'integer':
348 | return 'number';
349 | }
350 | if (Array.isArray(prop.type)) {
351 | if (prop.type.length === 7 && prop.type.sort().join() === 'array,boolean,integer,null,number,object,string') { // silly way to detect all possible json schema types
352 | return 'any';
353 | } else {
354 | return prop.type.map(v => v === 'integer' ? 'number' : v).join(' | ');
355 | }
356 | }
357 | return prop.type;
358 | }
359 |
360 | function objectType(prop: any): string {
361 | if (prop.properties) {
362 | let s = openBlock('', '{', false);
363 |
364 | let i = 0;
365 | for (let propName in prop.properties) {
366 | if (i++ > 0) {
367 | s += '\n';
368 | }
369 | const required = prop.required ? prop.required.indexOf(propName) >= 0 : false;
370 | s += property(propName, !required, prop.properties[propName]);
371 | }
372 |
373 | s += closeBlock('}', false);
374 | return s;
375 | }
376 |
377 | if (typeof prop.additionalProperties === 'boolean') {
378 | return `{ [key: string]: any; }`;
379 | }
380 |
381 | if (prop.additionalProperties) {
382 | return `{ [key: string]: ${orType(prop.additionalProperties.type)}; }`;
383 | }
384 | return '{}';
385 | }
386 |
387 | function orType(enm: string | string[]): string {
388 | if (typeof enm === 'string') {
389 | return enm;
390 | }
391 | return enm.join(' | ');
392 | }
393 |
394 | function property(name: string, optional: boolean, prop: P.PropertyType): string {
395 | let s = '';
396 | s += comment(prop);
397 | const type = propertyType(prop);
398 | const propertyDef = `${name}${optional ? '?' : ''}: ${type}`;
399 | if (type[0] === '\'' && type[type.length-1] === '\'' && type.indexOf('|') < 0) {
400 | s += line(`${propertyDef};`);
401 | } else {
402 | s += line(`${propertyDef};`);
403 | }
404 | return s;
405 | }
406 |
407 | function getRef(ref: string): string {
408 | const REXP = /#\/(.+)\/(.+)/;
409 | const matches = REXP.exec(ref);
410 | if (matches && matches.length === 3) {
411 | return matches[2];
412 | }
413 | console.log('error: ref');
414 | return ref;
415 | }
416 |
417 | function indent(): string {
418 | return ' '.repeat(numIndents);
419 | }
420 |
421 | function line(str?: string, newline?: boolean, indnt?: boolean): string {
422 | newline = typeof newline === 'boolean' ? newline : true;
423 | indnt = typeof indnt === 'boolean' ? indnt : true;
424 | let s = '';
425 | if (str) {
426 | if (indnt) {
427 | s += indent();
428 | }
429 | s += str;
430 | }
431 | if (newline) {
432 | s += '\n';
433 | }
434 | return s;
435 | }
436 |
437 | /// Main
438 |
439 | const debugProtocolSchema = JSON.parse(fs.readFileSync('./debugAdapterProtocol.json').toString());
440 |
441 | fs.writeFileSync(`specification.md`, MarkDown(debugProtocolSchema), { encoding: 'utf-8'});
442 |
443 | fs.writeFileSync(`_data/specification-toc.yml`, outline.dump(), { encoding: 'utf-8'});
444 |
--------------------------------------------------------------------------------
/_implementors/adapters.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: implementors
3 | title: "Debug Adapters"
4 | shortTitle: "Debug Adapters"
5 | author: Microsoft
6 | index: 1
7 | ---
8 |
9 | The following table lists the known debug adapters that implement the Debug Adapter Protocol. You may find these useful as reference material when writing your own debug adapter, or for use in your editor of choice.
10 |
11 | Many adapters publish releases tailored for specific editors, such as VS Code, and some document how to run standalone DAP servers which can be used in any editor which supports them (in [IntelliJ](https://www.jetbrains.com/help/idea/configuring-third-party-tools.html) or [VS Code](https://code.visualstudio.com/api/extension-guides/debugger-extension#development-setup-for-mock-debug) for example).
12 |
13 | | Adapter | Maintainer | Usage |
14 | |---------|------------|-------|
15 | [Android](https://github.com/adelphes/android-dev-ext)|[@adelphes](https://github.com/adelphes)|[VS Code](https://marketplace.visualstudio.com/items?itemName=adelphes.android-dev-ext)
16 | [Ansible](https://github.com/jborean93/ansibug)|[@jborean93](https://github.com/jborean93)|[VS Code](https://github.com/jborean93/vscode-ansibug)
17 | [Apache Camel](https://github.com/camel-tooling/camel-debug-adapter)|[contributors](https://github.com/camel-tooling/camel-debug-adapter/graphs/contributors)|[VS Code](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-debug-adapter-apache-camel), [Eclipse](https://marketplace.eclipse.org/content/textual-debugging-apache-camel)
18 | [Apex](https://github.com/forcedotcom/salesforcedx-vscode)|[@ntotten](https://github.com/ntotten)|[VS Code](https://marketplace.visualstudio.com/items?itemName=salesforce.salesforcedx-vscode-apex-debugger)
19 | [Ballerina](https://github.com/ballerina-platform/ballerina-lang/)|[Ballerina.io](https://ballerina.io/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=wso2.ballerina) |
20 | [C/C++](https://github.com/Microsoft/vscode-cpptools)|[@WardenGnaw](https://github.com/WardenGnaw)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)
21 | [C/C++/Rust](https://github.com/Marus/cortex-debug)|[@Marus](https://github.com/Marus)|[VS Code](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug)
22 | [C/C++/Rust - Midas: gdb & rr](https://github.com/farre/midas)|[@theIDinside](https://github.com/theIDinside)|[VS Code](https://marketplace.visualstudio.com/items?itemName=farrese.midas)
23 | [C#](https://github.com/OmniSharp/omnisharp-vscode)|[@gregg-miskelly](https://github.com/gregg-miskelly)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp)
24 | [Cobol](https://github.com/RechInformatica/rech-cobol-debugger)|[@RechInformatica](https://github.com/RechInformatica)|[VS Code](https://marketplace.visualstudio.com/items?itemName=rechinformatica.rech-cobol-debugger)
25 | [Cordova Tools](https://github.com/Microsoft/vscode-cordova)|[@MSLaguana](https://github.com/MSLaguana)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vsmobile.cordova-tools)
26 | [Dart](https://github.com/dart-lang/sdk)|[@DanTup](https://github.com/DanTup) [@devoncarew](https://github.com/devoncarew)|[DAP Server](https://github.com/dart-lang/sdk/blob/master/pkg/dds/tool/dap/README.md), [VS Code](https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code)
27 | [Debug](https://github.com/WebFreak001/code-debug)|[@WebFreak001](https://github.com/WebFreak001)|[VS Code](https://marketplace.visualstudio.com/items?itemName=webfreak.debug)
28 | [Debugger for Chrome](https://github.com/microsoft/vscode-chrome-debug)|[@roblourens](https://github.com/roblourens)|[VS Code](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome)
29 | [Debugger for Edge](https://github.com/Microsoft/vscode-edge-debug2)|[@andysterland](https://github.com/andysterland)|[VS Code](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-edge)
30 | [Debugger for Electron](https://github.com/Kode/vscode-electron-debug)|[@Kode](https://github.com/Kode)|[VS Code](https://marketplace.visualstudio.com/items?itemName=kodetech.electron-debug)
31 | [Debugger for Firefox](https://github.com/hbenl/vscode-firefox-debug)|[@hbenl](https://github.com/hbenl)|[VS Code](https://marketplace.visualstudio.com/items?itemName=hbenl.vscode-firefox-debug)
32 | [Debugger for Krom](https://github.com/Kode/vscode-krom-debug)|[@Kode](https://github.com/Kode)|[VS Code](https://marketplace.visualstudio.com/items?itemName=kodetech.krom-debug)
33 | [Debugger for IBM enterprise COBOL for z/OS](https://github.com/BroadcomMFD/debugger-for-mainframe)|[@Broadcom](https://www.broadcom.com)|[VS Code](https://marketplace.visualstudio.com/items?itemName=broadcomMFD.debugger-for-mainframe)
34 | [Debugger for .NET Core](https://github.com/Samsung/netcoredbg)|[@ayuckhulk](https://github.com/ayuckhulk)|[DAP Server](https://github.com/Samsung/netcoredbg/blob/master/doc/cli.md)
35 | [Debugger for PhantomJS](https://github.com/iradul/vscode-phantomjs-debug)|[@iradul](https://github.com/iradul)|[VS Code](https://marketplace.visualstudio.com/items?itemName=iradul.debugger-for-phantomjs)
36 | [Debugger for Unity](https://github.com/Unity-Technologies/vscode-unity-debug)|[@lukaszunity](https://github.com/lukaszunity) [@miniwolf](https://github.com/miniwolf)|[VS Code](https://marketplace.visualstudio.com/items?itemName=Unity.unity-debug)
37 | [DeZog - Z80 Assembly Debugger](https://github.com/maziac/dezog)|[@maziac](https://github.com/maziac)|[VS Code](https://marketplace.visualstudio.com/items?itemName=maziac.dezog)
38 | [Duktape Debugger](https://github.com/svaarala/duktape)|[@svaarala](https://github.com/svaarala)|[VS Code](https://marketplace.visualstudio.com/items?itemName=HaroldBrenes.duk-debug)
39 | [Elixir](https://github.com/elixir-lsp/elixir-ls)|[Elixir LSP](https://github.com/elixir-lsp)|[VS Code](https://marketplace.visualstudio.com/items?itemName=JakeBecker.elixir-ls)
40 | [Emulicious Debugger](https://github.com/Calindro/emulicious-debugger)|[@Calindro](https://github.com/Calindro)|[VS Code](https://marketplace.visualstudio.com/items?itemName=emulicious.emulicious-debugger)
41 | [Erlang EDB](https://github.com/whatsapp/edb)|[@WhatsApp](https://github.com/WhatsApp)|[VS Code](https://marketplace.visualstudio.com/items?itemName=erlang-language-platform.erlang-language-platform)
42 | [Erlang LS Debugger](https://github.com/erlang-ls/erlang_ls)|[@robertoaloi](https://github.com/robertoaloi) and [Contributors](https://github.com/erlang-ls/erlang_ls/graphs/contributors)|[VS Code](https://marketplace.visualstudio.com/items?itemName=erlang-ls.erlang-ls)
43 | [ESP32 Debugger](https://github.com/espressif/esp-debug-adapter)|[@espressif](https://github.com/espressif)|[DAP Server](https://github.com/espressif/esp-debug-adapter#usage)
44 | [Firefox Remote Debug](https://github.com/yurydelendik/vscode-ff-debug)|[@yurydelendik](https://github.com/yurydelendik)|[VS Code](https://marketplace.visualstudio.com/items?itemName=yurydelendik.firefox-debug)
45 | [Flash](https://github.com/vshaxe/flash-debugger)|[@vshaxe](https://github.com/vshaxe/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vshaxe.haxe-debug)
46 | [Flutter](https://github.com/flutter/flutter)|[@DanTup](https://github.com/DanTup) [@devoncarew](https://github.com/devoncarew)|[DAP Server](https://github.com/flutter/flutter/blob/master/packages/flutter_tools/lib/src/debug_adapters/README.md), [VS Code](https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter)
47 | [Godot](https://github.com/godotengine/godot)|[@godotengine](https://github.com/godotengine)|[DAP Server](https://docs.godotengine.org/en/stable/tutorials/editor/external_editor.html#lsp-dap-support), [Rider](https://www.jetbrains.com/lp/rider-godot/), [VS Code](https://github.com/godotengine/godot-vscode-plugin)
48 | [Go Delve Debugger](https://github.com/go-delve/delve/tree/master/service/dap)| [@polinasok](https://github.com/polinasok) and [Delve](https://github.com/go-delve)| [DAP Server](https://github.com/go-delve/delve/tree/master/Documentation/api/dap), [VS Code](https://github.com/golang/vscode-go/blob/master/docs/debugging.md)
49 | [Harbour](https://github.com/APerricone/harbourCodeExtension)|[@APerricone](https://github.com/APerricone)|[VS Code](https://marketplace.visualstudio.com/items?itemName=aperricone.harbour)
50 | [HashLink](https://github.com/vshaxe/hashlink-debugger)|[@vshaxe](https://github.com/vshaxe/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=HaxeFoundation.haxe-hl)
51 | [Haskell Debugger](https://well-typed.github.io/haskell-debugger/)|[@alt-romes](https://github.com/alt-romes) [@dmjio](https://github.com/dmjio)|[DAP Server](https://github.com/well-typed/haskell-debugger)
52 | [Haskell GHCi debug viewer Phoityne](https://github.com/phoityne/phoityne-vscode)|[@phoityne](https://github.com/phoityne)|[VS Code](https://marketplace.visualstudio.com/items?itemName=phoityne.phoityne-vscode)
53 | [Haxe Eval](https://github.com/vshaxe/eval-debugger)|[@vshaxe](https://github.com/vshaxe/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=nadako.vshaxe)
54 | [HXCPP](https://github.com/vshaxe/hxcpp-debugger)|[@vshaxe](https://github.com/vshaxe/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vshaxe.hxcpp-debugger)
55 | [Java Debugger](https://github.com/Microsoft/vscode-java-debug)|[@akaroml](https://github.com/akaroml)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug)
56 | [JavaScript Debugger](https://github.com/microsoft/vscode-js-debug)|[@connor4312](https://github.com/connor4312)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.js-debug)
57 | [JavaScript with Time-Traveling and Persistent State](https://github.com/awto/effectfuljs/tree/master/packages/vscode-debugger)|[@awto](https://github.com/awto)|[VS Code](https://marketplace.visualstudio.com/items?itemName=effectful.debugger)
58 | [JSIRDebugger](https://marketplace.visualstudio.com/items?itemName=muji.jsirdebugger)|muji
59 | [Karate](https://github.com/intuit/karate/tree/develop/karate-core/src/main/java/com/intuit/karate/debug)|[@kirk_slota](https://twitter.com/kirk_slota) [@ptrthomas](https://twitter.com/ptrthomas)|[VS Code](https://marketplace.visualstudio.com/items?itemName=kirkslota.karate-runner)
60 | [Kotlin](https://github.com/fwcd/kotlin-debug-adapter)|[@fwcd](https://github.com/fwcd)|[VS Code](https://marketplace.visualstudio.com/items?itemName=fwcd.kotlin)
61 | [LLDB Debugger](https://github.com/vadimcn/vscode-lldb)|[@vadimcn](https://github.com/vadimcn)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)
62 | [lldb-dap](https://github.com/llvm/llvm-project/tree/main/lldb/tools/lldb-dap)|[@llvm](https://github.com/llvm)|[DAP Server](https://github.com/llvm/llvm-project/tree/main/lldb/tools/lldb-dap), [VS Code](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.lldb-dap)
63 | [Lua and Ravi 5.3 Debugger](https://github.com/dibyendumajumdar/ravi-vscode-debugger)|[@dibyendumajumdar](https://github.com/dibyendumajumdar)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ravilang.ravi-debug)
64 | [Lua Debug](https://github.com/actboy168/lua-debug)|[@actboy168](https://github.com/actboy168)|[VS Code](https://marketplace.visualstudio.com/items?itemName=actboy168.lua-debug)
65 | [Luau Debugger](https://github.com/sssooonnnggg/luau-debugger)|[@sssooonnnggg](https://github.com/sssooonnnggg)|[VS Code](https://marketplace.visualstudio.com/items?itemName=sssooonnnggg.luau-debugger)
66 | [Mock Debug](https://github.com/Microsoft/vscode-mock-debug)|[@roblourens](https://github.com/roblourens)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.mock-debug)
67 | [Mono Debug](https://github.com/Microsoft/vscode-mono-debug)|[@akoeplinger](https://github.com/akoeplinger)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.mono-debug)
68 | [NAME](https://github.com/utdscheld/name)|[John Cole](https://personal.utdallas.edu/~John.Cole/)|
69 | [NativeScript](https://github.com/NativeScript/nativescript-vscode-extension/)|[@ivanbuhov](https://github.com/ivanbuhov)|[VS Code](https://marketplace.visualstudio.com/items?itemName=Telerik.nativescript)
70 | [Node Debug](https://github.com/Microsoft/vscode-node-debug)|[@weinand](https://github.com/weinand)|
71 | [OCaml Earlybird](https://github.com/hackwaly/ocamlearlybird)|[@sim642](https://github.com/sim642)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform)
72 | [OneScript Debug](https://github.com/EvilBeaver/OneScript)|[@EvilBeaver](https://github.com/EvilBeaver)|[VS Code](https://marketplace.visualstudio.com/items?itemName=EvilBeaver.oscript-debug)
73 | [OpenQASM](https://github.com/quantag/qasm-adapter-vscode)|[@quantag](https://github.com/quantag)|
74 | [Papyrus](https://github.com/joelday/papyrus-debug-server)|[@joelday](https://github.com/joelday)|[VS Code](https://marketplace.visualstudio.com/items?itemName=joelday.papyrus-lang-vscode)
75 | [Perl Debug](https://github.com/Nihilus118/vscode-perl-debug)|[@Nihilus118](https://github.com/Nihilus118)|[VS Code](https://marketplace.visualstudio.com/items?itemName=Nihilus118.perl-debugger)
76 | [Perl::LanguageServer](https://github.com/richterger/Perl-LanguageServer)|[@richterger](https://github.com/richterger)|[VS Code](https://marketplace.visualstudio.com/items?itemName=richterger.perl)
77 | [Php](https://github.com/xdebug/vscode-php-debug)|[@zobo](https://github.com/zobo)|[VS Code](https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug)
78 | [PowerShell](https://github.com/PowerShell/vscode-powershell)|[@daviwil](https://github.com/daviwil) [@rkeithhill](https://github.com/rkeithhill)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell)
79 | [Puppet](https://github.com/lingua-pupuli/puppet-editor-services)|[@glennsarti](https://github.com/glennsarti) [@jpogran](https://github.com/jpogran)|[VS Code](https://marketplace.visualstudio.com/items?itemName=jpogran.puppet-vscode)
80 | [Python](https://github.com/Microsoft/vscode-python)|[@DonJayamanne](https://github.com/DonJayamanne)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
81 | [R Debugger](https://github.com/ManuelHentschel/VSCode-R-Debugger)|[@ManuelHentschel](https://github.com/ManuelHentschel)|[VS Code](https://marketplace.visualstudio.com/items?itemName=RDebugger.r-debugger)
82 | [React Native Tools](https://github.com/Microsoft/vscode-react-native/issues)|[@MSLaguana](https://github.com/MSLaguana)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vsmobile.vscode-react-native)
83 | [Ruby LSP](https://github.com/Shopify/ruby-lsp)|[@Shopify](https://github.com/Shopify)|[VS Code](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp)
84 | [Ruby Byebug](https://rubygems.org/gems/byebug-dap)|[Ethan Reesor](https://gitlab.com/firelizzard)|
85 | [Ruby Byebug (VSCode)](https://gitlab.com/firelizzard/vscode-byebug)|[Ethan Reesor](https://gitlab.com/firelizzard)|[VS Code](https://marketplace.visualstudio.com/items?itemName=ethan-reesor.vscode-byebug)
86 | [Rust (for embedded)](https://github.com/probe-rs/vscode)|[probe.rs community](https://github.com/probe-rs)|[VS Code](https://probe.rs/docs/tools/vscode/), [Eclipse](https://marketplace.eclipse.org/content/eclipse-corrosion-rust-editing-and-debugging)
87 | [Scala](https://github.com/scalacenter/scala-debug-adapter)|[@adpi2](https://github.com/adpi2)|[SBT](https://index.scala-lang.org/scalacenter/scala-debug-adapter)
88 | [Squirrel](https://github.com/samisalreadytaken/sqdbg)|[@samisalreadytaken](https://github.com/samisalreadytaken)|
89 | [SWI-Prolog](https://github.com/eshelyaron/debug_adapter)|[@eshelyaron](https://github.com/eshelyaron)|[SWI and Emacs](https://github.com/eshelyaron/debug_adapter#installation)
90 | [SWF](https://github.com/BowlerHatLLC/vscode-nextgenas)|[@joshtynjala](https://github.com/joshtynjala)|[VS Code](https://marketplace.visualstudio.com/items?itemName=bowlerhatllc.vscode-nextgenas)
91 | [TLA+](https://github.com/tlaplus/vscode-tlaplus)|[@lemmy](https://github.com/lemmy)|[VS Code](https://marketplace.visualstudio.com/items?itemName=alygin.vscode-tlaplus-nightly)
92 | [VDM-SL, VDM++, VDM-RT](https://github.com/nickbattle/vdmj/tree/master/lsp)|[@nickbattle](https://github.com/nickbattle)|[VS Code](https://marketplace.visualstudio.com/items?itemName=jonaskrask.vdm-vscode)
93 | [VSCode rdbg Ruby Debugger](https://github.com/ruby/vscode-rdbg)|[@ko1](https://github.com/ko1)|[VS Code](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg)
94 | [Wolfram Language](https://github.com/kenkangxgwe/lsp-wl?tab=readme-ov-file#debug-adapter-features)|[@kenkangxgwe](https://github.com/kenkangxgwe/lsp-wl)|[VS Code](https://marketplace.visualstudio.com/items?itemName=lsp-wl.lsp-wl-client)
95 | {: .table .table-bordered .table-responsive}
96 |
97 | *If you are missing a debug adapter implementation please create a pull request in GitHub against this markdown [document](https://github.com/Microsoft/debug-adapter-protocol/blob/main/_implementors/adapters.md)*
98 |
99 |
--------------------------------------------------------------------------------
/License.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) Microsoft Corporation.
2 |
3 | All rights reserved.
4 |
5 | Distributed under the following terms:
6 |
7 | 1. Documentation is licensed under the Creative Commons Attribution 3.0 United States License. Code is licensed under the MIT License.
8 | 2. This license does not grant you rights to use any trademarks or logos of Microsoft. For Microsoft’s general trademark guidelines, go to http://go.microsoft.com/fwlink/?LinkID=254653
9 |
10 | ---
11 |
12 | Attribution 4.0 International
13 |
14 | =======================================================================
15 |
16 | Creative Commons Corporation ("Creative Commons") is not a law firm and
17 | does not provide legal services or legal advice. Distribution of
18 | Creative Commons public licenses does not create a lawyer-client or
19 | other relationship. Creative Commons makes its licenses and related
20 | information available on an "as-is" basis. Creative Commons gives no
21 | warranties regarding its licenses, any material licensed under their
22 | terms and conditions, or any related information. Creative Commons
23 | disclaims all liability for damages resulting from their use to the
24 | fullest extent possible.
25 |
26 | Using Creative Commons Public Licenses
27 |
28 | Creative Commons public licenses provide a standard set of terms and
29 | conditions that creators and other rights holders may use to share
30 | original works of authorship and other material subject to copyright
31 | and certain other rights specified in the public license below. The
32 | following considerations are for informational purposes only, are not
33 | exhaustive, and do not form part of our licenses.
34 |
35 | Considerations for licensors: Our public licenses are
36 | intended for use by those authorized to give the public
37 | permission to use material in ways otherwise restricted by
38 | copyright and certain other rights. Our licenses are
39 | irrevocable. Licensors should read and understand the terms
40 | and conditions of the license they choose before applying it.
41 | Licensors should also secure all rights necessary before
42 | applying our licenses so that the public can reuse the
43 | material as expected. Licensors should clearly mark any
44 | material not subject to the license. This includes other CC-
45 | licensed material, or material used under an exception or
46 | limitation to copyright. More considerations for licensors:
47 | wiki.creativecommons.org/Considerations_for_licensors
48 |
49 | Considerations for the public: By using one of our public
50 | licenses, a licensor grants the public permission to use the
51 | licensed material under specified terms and conditions. If
52 | the licensor's permission is not necessary for any reason--for
53 | example, because of any applicable exception or limitation to
54 | copyright--then that use is not regulated by the license. Our
55 | licenses grant only permissions under copyright and certain
56 | other rights that a licensor has authority to grant. Use of
57 | the licensed material may still be restricted for other
58 | reasons, including because others have copyright or other
59 | rights in the material. A licensor may make special requests,
60 | such as asking that all changes be marked or described.
61 | Although not required by our licenses, you are encouraged to
62 | respect those requests where reasonable. More_considerations
63 | for the public:
64 | wiki.creativecommons.org/Considerations_for_licensees
65 |
66 | =======================================================================
67 |
68 | Creative Commons Attribution 4.0 International Public License
69 |
70 | By exercising the Licensed Rights (defined below), You accept and agree
71 | to be bound by the terms and conditions of this Creative Commons
72 | Attribution 4.0 International Public License ("Public License"). To the
73 | extent this Public License may be interpreted as a contract, You are
74 | granted the Licensed Rights in consideration of Your acceptance of
75 | these terms and conditions, and the Licensor grants You such rights in
76 | consideration of benefits the Licensor receives from making the
77 | Licensed Material available under these terms and conditions.
78 |
79 |
80 | Section 1 -- Definitions.
81 |
82 | a. Adapted Material means material subject to Copyright and Similar
83 | Rights that is derived from or based upon the Licensed Material
84 | and in which the Licensed Material is translated, altered,
85 | arranged, transformed, or otherwise modified in a manner requiring
86 | permission under the Copyright and Similar Rights held by the
87 | Licensor. For purposes of this Public License, where the Licensed
88 | Material is a musical work, performance, or sound recording,
89 | Adapted Material is always produced where the Licensed Material is
90 | synched in timed relation with a moving image.
91 |
92 | b. Adapter's License means the license You apply to Your Copyright
93 | and Similar Rights in Your contributions to Adapted Material in
94 | accordance with the terms and conditions of this Public License.
95 |
96 | c. Copyright and Similar Rights means copyright and/or similar rights
97 | closely related to copyright including, without limitation,
98 | performance, broadcast, sound recording, and Sui Generis Database
99 | Rights, without regard to how the rights are labeled or
100 | categorized. For purposes of this Public License, the rights
101 | specified in Section 2(b)(1)-(2) are not Copyright and Similar
102 | Rights.
103 |
104 | d. Effective Technological Measures means those measures that, in the
105 | absence of proper authority, may not be circumvented under laws
106 | fulfilling obligations under Article 11 of the WIPO Copyright
107 | Treaty adopted on December 20, 1996, and/or similar international
108 | agreements.
109 |
110 | e. Exceptions and Limitations means fair use, fair dealing, and/or
111 | any other exception or limitation to Copyright and Similar Rights
112 | that applies to Your use of the Licensed Material.
113 |
114 | f. Licensed Material means the artistic or literary work, database,
115 | or other material to which the Licensor applied this Public
116 | License.
117 |
118 | g. Licensed Rights means the rights granted to You subject to the
119 | terms and conditions of this Public License, which are limited to
120 | all Copyright and Similar Rights that apply to Your use of the
121 | Licensed Material and that the Licensor has authority to license.
122 |
123 | h. Licensor means the individual(s) or entity(ies) granting rights
124 | under this Public License.
125 |
126 | i. Share means to provide material to the public by any means or
127 | process that requires permission under the Licensed Rights, such
128 | as reproduction, public display, public performance, distribution,
129 | dissemination, communication, or importation, and to make material
130 | available to the public including in ways that members of the
131 | public may access the material from a place and at a time
132 | individually chosen by them.
133 |
134 | j. Sui Generis Database Rights means rights other than copyright
135 | resulting from Directive 96/9/EC of the European Parliament and of
136 | the Council of 11 March 1996 on the legal protection of databases,
137 | as amended and/or succeeded, as well as other essentially
138 | equivalent rights anywhere in the world.
139 |
140 | k. You means the individual or entity exercising the Licensed Rights
141 | under this Public License. Your has a corresponding meaning.
142 |
143 |
144 | Section 2 -- Scope.
145 |
146 | a. License grant.
147 |
148 | 1. Subject to the terms and conditions of this Public License,
149 | the Licensor hereby grants You a worldwide, royalty-free,
150 | non-sublicensable, non-exclusive, irrevocable license to
151 | exercise the Licensed Rights in the Licensed Material to:
152 |
153 | a. reproduce and Share the Licensed Material, in whole or
154 | in part; and
155 |
156 | b. produce, reproduce, and Share Adapted Material.
157 |
158 | 2. Exceptions and Limitations. For the avoidance of doubt, where
159 | Exceptions and Limitations apply to Your use, this Public
160 | License does not apply, and You do not need to comply with
161 | its terms and conditions.
162 |
163 | 3. Term. The term of this Public License is specified in Section
164 | 6(a).
165 |
166 | 4. Media and formats; technical modifications allowed. The
167 | Licensor authorizes You to exercise the Licensed Rights in
168 | all media and formats whether now known or hereafter created,
169 | and to make technical modifications necessary to do so. The
170 | Licensor waives and/or agrees not to assert any right or
171 | authority to forbid You from making technical modifications
172 | necessary to exercise the Licensed Rights, including
173 | technical modifications necessary to circumvent Effective
174 | Technological Measures. For purposes of this Public License,
175 | simply making modifications authorized by this Section 2(a)
176 | (4) never produces Adapted Material.
177 |
178 | 5. Downstream recipients.
179 |
180 | a. Offer from the Licensor -- Licensed Material. Every
181 | recipient of the Licensed Material automatically
182 | receives an offer from the Licensor to exercise the
183 | Licensed Rights under the terms and conditions of this
184 | Public License.
185 |
186 | b. No downstream restrictions. You may not offer or impose
187 | any additional or different terms or conditions on, or
188 | apply any Effective Technological Measures to, the
189 | Licensed Material if doing so restricts exercise of the
190 | Licensed Rights by any recipient of the Licensed
191 | Material.
192 |
193 | 6. No endorsement. Nothing in this Public License constitutes or
194 | may be construed as permission to assert or imply that You
195 | are, or that Your use of the Licensed Material is, connected
196 | with, or sponsored, endorsed, or granted official status by,
197 | the Licensor or others designated to receive attribution as
198 | provided in Section 3(a)(1)(A)(i).
199 |
200 | b. Other rights.
201 |
202 | 1. Moral rights, such as the right of integrity, are not
203 | licensed under this Public License, nor are publicity,
204 | privacy, and/or other similar personality rights; however, to
205 | the extent possible, the Licensor waives and/or agrees not to
206 | assert any such rights held by the Licensor to the limited
207 | extent necessary to allow You to exercise the Licensed
208 | Rights, but not otherwise.
209 |
210 | 2. Patent and trademark rights are not licensed under this
211 | Public License.
212 |
213 | 3. To the extent possible, the Licensor waives any right to
214 | collect royalties from You for the exercise of the Licensed
215 | Rights, whether directly or through a collecting society
216 | under any voluntary or waivable statutory or compulsory
217 | licensing scheme. In all other cases the Licensor expressly
218 | reserves any right to collect such royalties.
219 |
220 |
221 | Section 3 -- License Conditions.
222 |
223 | Your exercise of the Licensed Rights is expressly made subject to the
224 | following conditions.
225 |
226 | a. Attribution.
227 |
228 | 1. If You Share the Licensed Material (including in modified
229 | form), You must:
230 |
231 | a. retain the following if it is supplied by the Licensor
232 | with the Licensed Material:
233 |
234 | i. identification of the creator(s) of the Licensed
235 | Material and any others designated to receive
236 | attribution, in any reasonable manner requested by
237 | the Licensor (including by pseudonym if
238 | designated);
239 |
240 | ii. a copyright notice;
241 |
242 | iii. a notice that refers to this Public License;
243 |
244 | iv. a notice that refers to the disclaimer of
245 | warranties;
246 |
247 | v. a URI or hyperlink to the Licensed Material to the
248 | extent reasonably practicable;
249 |
250 | b. indicate if You modified the Licensed Material and
251 | retain an indication of any previous modifications; and
252 |
253 | c. indicate the Licensed Material is licensed under this
254 | Public License, and include the text of, or the URI or
255 | hyperlink to, this Public License.
256 |
257 | 2. You may satisfy the conditions in Section 3(a)(1) in any
258 | reasonable manner based on the medium, means, and context in
259 | which You Share the Licensed Material. For example, it may be
260 | reasonable to satisfy the conditions by providing a URI or
261 | hyperlink to a resource that includes the required
262 | information.
263 |
264 | 3. If requested by the Licensor, You must remove any of the
265 | information required by Section 3(a)(1)(A) to the extent
266 | reasonably practicable.
267 |
268 | 4. If You Share Adapted Material You produce, the Adapter's
269 | License You apply must not prevent recipients of the Adapted
270 | Material from complying with this Public License.
271 |
272 |
273 | Section 4 -- Sui Generis Database Rights.
274 |
275 | Where the Licensed Rights include Sui Generis Database Rights that
276 | apply to Your use of the Licensed Material:
277 |
278 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right
279 | to extract, reuse, reproduce, and Share all or a substantial
280 | portion of the contents of the database;
281 |
282 | b. if You include all or a substantial portion of the database
283 | contents in a database in which You have Sui Generis Database
284 | Rights, then the database in which You have Sui Generis Database
285 | Rights (but not its individual contents) is Adapted Material; and
286 |
287 | c. You must comply with the conditions in Section 3(a) if You Share
288 | all or a substantial portion of the contents of the database.
289 |
290 | For the avoidance of doubt, this Section 4 supplements and does not
291 | replace Your obligations under this Public License where the Licensed
292 | Rights include other Copyright and Similar Rights.
293 |
294 |
295 | Section 5 -- Disclaimer of Warranties and Limitation of Liability.
296 |
297 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
298 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
299 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
300 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
301 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
302 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
303 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
304 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
305 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
306 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
307 |
308 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
309 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
310 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
311 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
312 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
313 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
314 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
315 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
316 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
317 |
318 | c. The disclaimer of warranties and limitation of liability provided
319 | above shall be interpreted in a manner that, to the extent
320 | possible, most closely approximates an absolute disclaimer and
321 | waiver of all liability.
322 |
323 |
324 | Section 6 -- Term and Termination.
325 |
326 | a. This Public License applies for the term of the Copyright and
327 | Similar Rights licensed here. However, if You fail to comply with
328 | this Public License, then Your rights under this Public License
329 | terminate automatically.
330 |
331 | b. Where Your right to use the Licensed Material has terminated under
332 | Section 6(a), it reinstates:
333 |
334 | 1. automatically as of the date the violation is cured, provided
335 | it is cured within 30 days of Your discovery of the
336 | violation; or
337 |
338 | 2. upon express reinstatement by the Licensor.
339 |
340 | For the avoidance of doubt, this Section 6(b) does not affect any
341 | right the Licensor may have to seek remedies for Your violations
342 | of this Public License.
343 |
344 | c. For the avoidance of doubt, the Licensor may also offer the
345 | Licensed Material under separate terms or conditions or stop
346 | distributing the Licensed Material at any time; however, doing so
347 | will not terminate this Public License.
348 |
349 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
350 | License.
351 |
352 |
353 | Section 7 -- Other Terms and Conditions.
354 |
355 | a. The Licensor shall not be bound by any additional or different
356 | terms or conditions communicated by You unless expressly agreed.
357 |
358 | b. Any arrangements, understandings, or agreements regarding the
359 | Licensed Material not stated herein are separate from and
360 | independent of the terms and conditions of this Public License.
361 |
362 |
363 | Section 8 -- Interpretation.
364 |
365 | a. For the avoidance of doubt, this Public License does not, and
366 | shall not be interpreted to, reduce, limit, restrict, or impose
367 | conditions on any use of the Licensed Material that could lawfully
368 | be made without permission under this Public License.
369 |
370 | b. To the extent possible, if any provision of this Public License is
371 | deemed unenforceable, it shall be automatically reformed to the
372 | minimum extent necessary to make it enforceable. If the provision
373 | cannot be reformed, it shall be severed from this Public License
374 | without affecting the enforceability of the remaining terms and
375 | conditions.
376 |
377 | c. No term or condition of this Public License will be waived and no
378 | failure to comply consented to unless expressly agreed to by the
379 | Licensor.
380 |
381 | d. Nothing in this Public License constitutes or may be interpreted
382 | as a limitation upon, or waiver of, any privileges and immunities
383 | that apply to the Licensor or You, including from the legal
384 | processes of any jurisdiction or authority.
385 |
386 |
387 | =======================================================================
388 |
389 | Creative Commons is not a party to its public
390 | licenses. Notwithstanding, Creative Commons may elect to apply one of
391 | its public licenses to material it publishes and in those instances
392 | will be considered the “Licensor.” The text of the Creative Commons
393 | public licenses is dedicated to the public domain under the CC0 Public
394 | Domain Dedication. Except for the limited purpose of indicating that
395 | material is shared under a Creative Commons public license or as
396 | otherwise permitted by the Creative Commons policies published at
397 | creativecommons.org/policies, Creative Commons does not authorize the
398 | use of the trademark "Creative Commons" or any other trademark or logo
399 | of Creative Commons without its prior written consent including,
400 | without limitation, in connection with any unauthorized modifications
401 | to any of its public licenses or any other arrangements,
402 | understandings, or agreements concerning use of licensed material. For
403 | the avoidance of doubt, this paragraph does not form part of the
404 | public licenses.
405 |
406 | Creative Commons may be contacted at creativecommons.org.
407 |
--------------------------------------------------------------------------------
/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Overview
3 | layout: singlePage
4 | sectionid: overview
5 | ---
6 |
7 | ## What is the Debug Adapter Protocol?
8 |
9 | It takes a significant effort to implement the UI for a new debugger for features like:
10 | - source-, function-, conditional-, and inline breakpoints,
11 | - variable values shown in hovers or inlined in the source,
12 | - multi-process and multi-thread support,
13 | - navigating through complex data structures,
14 | - watch expressions,
15 | - debug console for interactive evaluation with autocomplete (aka REPL),
16 | - log points.
17 |
18 | Typically this work must be repeated for each development tool, as each tool uses different APIs for implementing its user interface.
19 | This results in lots of duplicated functionality (and implementation) as visualized by the blue boxes in the following picture:
20 |
21 | 
22 |
23 | The idea behind the _Debug Adapter Protocol_ is to standardize an abstract protocol for how a development tool communicates with concrete debuggers.
24 |
25 | A similar approach was already [introduced in 2016](https://code.visualstudio.com/blogs/2016/06/27/common-language-protocol) with the [_Language Server Protocol_](https://microsoft.github.io/language-server-protocol/) which standardized an abstract protocol between an editor or IDE and a server providing "language smartness."
26 |
27 | Since it is unrealistic to assume that existing debuggers or runtimes adopt this protocol any time soon,
28 | we rather assume that an _intermediary_ component takes over the role of adapting an existing debugger or runtime API to the Debug Adapter Protocol.
29 | This intermediary becomes the _Debug Adapter_ which explains the name of the protocol: _Debug Adapter Protocol_.
30 | The following picture shows the resulting architecture:
31 |
32 | 
33 |
34 | The diagram shows that the Debug Adapter Protocol makes it possible to implement a single generic debugger UI per development tool
35 | and that Debug Adapters can be re-used across these tools. This reduces the effort to support a new debugger considerably.
36 |
37 | Standardizing on a wire-protocol instead of an API and a client library has the advantage that a debug adapter can be implemented in the language most suitable for the given debugger or runtime.
38 |
39 | Since the _Debug Adapter Protocol_ was designed for supporting the debugging UI in a language agnostic way,
40 | it is fairly high-level and does not have to surface all the fine details of the underlying language and low-level debugger API.
41 | The most important data type used in the protocol are strings, because that's what the end user will see in the UI.
42 | So Debug Adapters typically aggregate information received via debugger APIs into high-level, string-based data-structures that are directly consumed in the UI of the development tool.
43 | Since this mapping is mostly straightforward and has little complexity, Debug adapters can be developed with minimal effort.
44 |
45 | The _Debug Adapter Protocol_ is a win for both debugger/runtime providers and tooling vendors!
46 |
47 | ## How it works
48 |
49 | The following sections explain the interaction between a development tool (e.g. IDE or editor) and a debug adapter.
50 | This should not only help when implementing the Debug Adapter Protocol in a debug adapter, but also when _hosting_ the protocol in a development tool (sometimes also called "host" or "client").
51 |
52 | ### Debug Session Start
53 |
54 | When a debug session starts, the development tool needs a way to communicate with the debug adapter that implements the Debug Adapter Protocol.
55 | How the debug adapter comes to life is not part of the protocol specification, but it is still an important detail if debug adapters should work across different development tools.
56 |
57 | A development tool has basically two ways of interacting with a debug adapter:
58 | - **single session mode**: in this mode, the development tool starts a debug adapter as a standalone process and communicates with it through *stdin* and *stdout*. At the end of the debug session the debug adapter is terminated. For concurrent debug sessions, the development tool starts multiple debug adapters.
59 | - **multi session mode**: in this mode, the development tool does not start the debug adapter but assumes that it is already running and that it listens on a specific port for connections attempts. For every debug session, the development tool initiates a new communication session on a specific port and disconnects at the end of the session.
60 |
61 | After establishing a connection to the debug adapter, the development tool starts communicating with the adapter via the _base protocol_.
62 |
63 | ### Base protocol
64 |
65 | The base protocol exchanges messages that consist of a header and a content part (comparable to HTTP).
66 | The header and content part are separated by a `\r\n` (carriage return, line feed).
67 |
68 | #### Header Part
69 |
70 | The header part consists of header fields. Each header field is comprised of a key and a value, separated by ': ' (a colon and a space).
71 | Each header field is terminated by `\r\n`.
72 |
73 | Since both the last header field and the overall header itself are each terminated with `\r\n`,
74 | and since the header is mandatory, the content part of a message is always preceded (and uniquely identified) by two `\r\n` sequences.
75 |
76 | Currently only a single header field is supported and required:
77 |
78 | | Header Field Name | Value Type | Description |
79 | |:------------------|:------------|:------------|
80 | | Content-Length | number | The length of the content part in bytes. This header is required. |
81 | {: .table .table-bordered .table-responsive}
82 |
83 | The header part is encoded using the 'ASCII' encoding. This includes the `\r\n` separating the header and content part.
84 |
85 | #### Content Part
86 |
87 | The content part contains the actual content of the message. The content part of a message uses JSON to describe [requests](./specification#Base_Protocol_Request), [responses](./specification#Base_Protocol_Response), and [events](./specification#Base_Protocol_Event).
88 |
89 | The content part is encoded using `utf-8`.
90 |
91 | `integer`s defined in the protocol (JSON schema type `integer`) may be represented as 32 bit signed integers, although some properties disallow negative values. `number`s in the protocol (JSON schema type `number`) may be represented as 64 bit floating point numbers.
92 |
93 | #### Example:
94 |
95 | This example shows the JSON for the DAP [next](./specification#Requests_Next) request:
96 |
97 | ```
98 | Content-Length: 119\r\n
99 | \r\n
100 | {
101 | "seq": 153,
102 | "type": "request",
103 | "command": "next",
104 | "arguments": {
105 | "threadId": 3
106 | }
107 | }
108 | ```
109 |
110 | ### Initialization
111 |
112 | The Debug Adapter Protocol defines many features and this number is still growing, albeit slowly.
113 | However, the protocol is still at its first version because it was an explicit design goal to support new feature in a completely backward compatible way.
114 | Making this possible without version numbers requires that every new feature gets a corresponding flag that lets a development tool know whether a debug adapter supports the feature or not. The absence of the flag always means that the feature is not supported.
115 |
116 | A single feature and its corresponding flag is called a "capability" in the Debug Adapter Protocol. The open-ended set of all features flags is called DAP's "capabilities."
117 |
118 | When starting a debug session, the development tool sends an [**initialize**](./specification#Requests_Initialize) request to the adapter in order to exchange capabilities between the development tool and the debug adapter.
119 |
120 | The development tool capabilities are provided in the [**InitializeRequestArguments**](./specification#Types_InitializeRequestArguments) structure of the [**initialize**](./specification#Requests_Initialize) request and typically start with the prefix `supports`.
121 | Other pieces of information passed from the tool to the debug adapter are:
122 | - the name of the development tool,
123 | - the format of file paths, `native` or `uri`,
124 | - whether line and column values are 0 or 1 based,
125 | - the locale used by the development tool. A debug adapter is expected to return error messages that honor this locale.
126 |
127 | The debug adapter returns the supported capabilities in the [**InitializeResponse**](./specification#Types_InitializeResponse) via the [**Capabilities**](./specification#Types_Capabilities) type.
128 | It is not necessary to return an explicit `false` for unsupported capabilities.
129 |
130 | ### Launching and attaching
131 |
132 | After the debug adapter has been initialized, it is ready to accept requests for starting debugging.
133 | Two requests exist for this:
134 | - [**launch**](./specification#Requests_Launch) request: the debug adapter launches the program ("debuggee") in debug mode and then starts to communicate with it.
135 | Since the debug adapter is responsible for launching the debuggee, it should provide a mechanism for the end user to configure the debuggee. For example, passing arguments or specifying a working directory.
136 | - Debug adapters are free to launch the debuggee however they choose. Typically the debuggee is launched as a child process and its output channels are connected to a client's debug console via [**output**](./specification.md#Events_Output) events. However, this has certain limitations, such as not being able to write to the terminal device directly and not being able to accept standard input. For those cases, launching the debuggee in a terminal is preferable. A debug adapter can use the [**runInTerminal**](./specification#Reverse_Requests_RunInTerminal) request to ask the client to launch the debuggee in a terminal that is integrated into the client or in a terminal that runs outside of the client (but still configured and managed from the client).
137 | - [**attach**](./specification#Requests_Attach) request: the debug adapter connects to an already running program. Here the end user is responsible for launching and terminating the program.
138 |
139 | Since arguments for both requests are highly dependent on a specific debugger and debug adapter implementation, the Debug Adapter Protocol does not specify any arguments for these requests.
140 | Instead, the development tool is expected to get information about debugger specific arguments from elsewhere (e.g. contributed by some plugin or extension mechanism)
141 | and to build a UI and validation mechanism on top of that.
142 |
143 | ### Configuring breakpoint and exception behavior
144 |
145 | Since the development tool implements a generic debugger UI, it is responsible for managing breakpoints and other configurable options like exceptions.
146 | This configuration information must be passed to the debug adapter before program execution starts.
147 | Some debuggers are able to deal with this information very early, even before the debuggee is known; other debuggers accept this information only when the debuggee is about to start running.
148 |
149 | Since the development tool does not know when is the correct moment for passing the configuration information to the adapter,
150 | the debug adapter is expected to send an [**initialized**](./specification#Events_Initialized) event to the development tool
151 | to announce that it is ready to accept configuration requests.
152 | With this approach a debug adapter does not have to implement a buffering strategy for configuration information.
153 |
154 | In response to the *initialized* event, the development tool sends the configuration information using these requests:
155 | * [**setBreakpoints**](./specification#Requests_SetBreakpoints) one request for all breakpoints in a single source,
156 | * [**setFunctionBreakpoints**](./specification#Requests_SetFunctionBreakpoints) if the debug adapter supports function breakpoints,
157 | * [**setExceptionBreakpoints**](./specification#Requests_SetExceptionBreakpoints) if the debug adapter supports any exception options,
158 | * [**configurationDoneRequest**](./specification#Requests_ConfigurationDone) to indicate the end of the configuration sequence.
159 |
160 | The *setBreakpoints* request registers all breakpoints that exist for a single source (so it is not incremental).
161 | A simple implementation of these semantics in the debug adapter is to clear all previous breakpoints for the source and then set the breakpoints specified in the request.
162 | *setBreakpoints* and *setFunctionBreakpoints* are expected to return the 'actual' breakpoints and the generic debugger updates the UI dynamically if a breakpoint could not be set at the requested position or was moved by the debugger.
163 |
164 | If a debug adapter is unable to apply a breakpoint at the time when it's first sent, it should mark the breakpoint as unverified using `verified: false` in the `SetBreakpointsResponse`. If the breakpoint changes its state at a later point in time, the debug adapter should use the [**breakpoint**](./specification#Events_Breakpoint) event to notify the client.
165 |
166 | ### Launch Sequencing
167 |
168 | There are three main building blocks we've discussed to create a debugging session:
169 |
170 | - Initialization, via the `initialize` request,
171 | - Configuration of breakpoints and exceptions during the configuration stage, and
172 | - Starting the debugger, via a launch or attach request.
173 |
174 | Initialization happens first, and the debug adapter must respond to the `initialize` request with any capabilities before any further communication can take place. At any point after the client receives the capabilities, it sends a `launch` or `attach` request.
175 |
176 | Once the debug adapter is ready to receive configuration from the client, it sends an `initialized` event to the client. As described above, the client sends zero or more configuration-related requests before sending a `configurationDone` request.
177 |
178 | After the response to `configurationDone` is sent, the debug adapter may respond to the `launch` or `attach` request, and then the debug session has started.
179 |
180 | The following sequence diagram summarizes the sequence of requests and events for a hypothetical _gdb_ debug adapter:
181 |
182 |
183 |
184 | ### Stopping and accessing debuggee state
185 |
186 | Whenever the program stops (on program entry, because a breakpoint was hit, an exception occurred, or the user requested execution to be paused),
187 | the debug adapter sends a [**stopped**](./specification#Events_Stopped) event with the appropriate reason and thread id.
188 |
189 | Upon receipt, the development tool first requests the [`threads`](./specification#Types_Thread) (see below) and then the *stacktrace* (a list of [`stack frames`](./specification#Types_StackFrame)) for the thread mentioned in the stopped event.
190 | If the user then drills into the stack frame, the development tool first requests the [`scopes`](./specification#Types_Scope) for a stack frame, and then the [`variables`](./specification#Types_Variable) for a scope.
191 | If a variable is itself structured, the development tool requests its properties through additional *variables* requests.
192 | This leads to the following request waterfall:
193 |
194 | ```
195 | Threads
196 | StackTrace
197 | Scopes
198 | Variables
199 | ...
200 | Variables
201 | ```
202 |
203 | The value of variables can be modified through the [**setVariable**](./specification#Requests_SetVariable) request.
204 |
205 | #### Lifetime of Objects References
206 |
207 | Some complex structural objects such as [`scopes`](./specification#Types_Scope) or [`variables`](./specification#Types_Variable) are not returned directly with their containers ([`stack frames`](./specification#Types_StackFrame), [`scopes`](./specification#Types_Scope), [`variables`](./specification#Types_Variable)), but must be retrieved with separate [**scopes**](./specification#Requests_Scopes) and [**variables**](./specification#Requests_Variables) requests based on *object references*. An object reference is an integer in the open interval (0, 231) assigned to objects by the debug adapter.
208 |
209 | To simplify the management of object references in debug adapters, their lifetime is limited to the current suspended state. Once execution resumes, object references become invalid and DAP clients must not use them. When execution is paused again, object references no longer refer to the same objects. This means that a debug adapter can easily use sequentially assigned integers for different objects and reset the counter to 1 when execution resumes.
210 |
211 | Variable references not related to the current suspended state, such as those from `evaluate` requests or in `output` events, should be preserved as long as feasible for the debug adapter so that the client may later inspect them.
212 |
213 | Please note that other object references like `threadId` do not have limited lifetime because that would prevent something like the `pause` request from working in the running state.
214 |
215 | ### Supporting threads
216 |
217 | Whenever the generic debugger receives a [**stopped**](./specification#Events_Stopped) or a [**thread**](./specification#Events_Thread) event, the development tool requests all [`threads`](./specification#Types_Thread) that exist at that point in time. [**Thread**](./specification#Events_Thread) events are optional, but a debug adapter can send them to force the development tool to update the threads UI dynamically even when not in a stopped state. If a debug adapter decides not to emit [**Thread**](./specification#Events_Thread) events, the thread UI in the development tool will only update if a [**stopped**](./specification#Events_Stopped) event is received.
218 |
219 | After a successful *launch* or *attach*, the development tool requests the baseline of currently existing threads with the [**threads**](./specification#Requests_Threads) request and then starts to listen for [**thread**](./specification#Events_Thread) events to detect new or terminated threads. Even if a debug adapter does not support multiple threads, it must implement the [**threads**](./specification#Requests_Threads) request and return a single (dummy) thread. The thread id must be used in all requests which refer to a thread, e.g. [**stacktrace**](./specification#Requests_Stacktrace), [**pause**](./specification#Requests_Pause), [**continue**](./specification#Requests_Continue), [**next**](./specification#Requests_Next), [**stepIn**](./specification#Requests_StepIn), and [**stepOut**](./specification#Requests_StepOut).
220 |
221 | ### Debug session end
222 |
223 | When the development tool ends a debug session, the sequence of events is slightly different based on whether the session has been initially "launched" or "attached":
224 |
225 | - Debuggee **_launched_**:
226 | if a debug adapter supports the [**terminate**](./specification#Requests_Terminate) request, the development tool uses it to terminate the debuggee gracefully, i.e. it gives the debuggee a chance to cleanup everything before terminating. If the debuggee does not terminate but continues to run (or hits a breakpoint), the debug session will continue, but if the development tool tries again to terminate the debuggee, it will then use the [**disconnect**](./specification#Requests_Disconnect) request to end the debug session unconditionally. The *disconnect* request is expected to terminate the debuggee (and any child processes) forcefully.
227 | - Debuggee **_attached_**:
228 | If the debuggee has been "attached" initially, the development tool issues a [**disconnect**](./specification#Requests_Disconnect) request. This should detach the debugger from the debuggee but will allow it to continue.
229 |
230 | In all situations where a debug adapter wants to end the debug session, a [**terminated**](./specification#Events_Terminated) event must be fired.
231 |
232 | If the debuggee has ended (and the debug adapter is able to detect this), an optional [**exited**](./specification#Events_Exited) event can be issued to return the exit code to the development tool.
233 |
234 | This diagram summarizes the sequence of request and events for a hypothetical debug adapter for _gdb_:
235 |
236 |
237 |
238 | ## Libraries (SDKs) for DAP providers and consumers
239 |
240 | To simplify the implementation of debug adapters, there are libraries or SDKs:
241 |
242 | - *Debug Adapter SDKs* for the different implementation languages there is an SDK to implement a debug adapter in a particular language. For example, to implement a debug adapter using Node.js there is the [debug adapter npm module](https://www.npmjs.com/package/@vscode/debugadapter).
243 |
--------------------------------------------------------------------------------
/changelog.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Change Log
3 | layout: singlePage
4 | sectionid: changelog
5 | ---
6 |
7 | #### All notable changes to the specification will be documented in this file.
8 |
9 | * 1.70.x
10 | * Clarify how `StackTraceArguments.format` applies
11 | * Clarify the default behavior of `ContinuedEvent.allThreadsContinued`
12 | * Clarify representation of breakpoints after a `changed` event
13 |
14 | * 1.69.x
15 | * Clarify the flow diagram to start a debug session
16 | * Add `supportsANSIStyling` capabilities to allow colorization of text from debug adapters
17 |
18 | * 1.68.x
19 | * Add `locationReference`s to Variable-related data types to allow navigation to declarations, and a corresponding `locations` request.
20 | * Clarify the meaning of "system process"
21 | * Clarify the lifetime of `variableReference`s after a `setVariable` call
22 | * Fix typographic errors in `StackFrame.canRestart`
23 |
24 | * 1.67.x
25 | * Add `line`, `column`, and `source` location attributions to `EvaluateArguments`
26 | * Add `returnValue` as a well-known `Scope.presentationHint`
27 |
28 | * 1.66.x
29 | * Add `bytes` and `asAddress` properties to the `DataBreakpointInfo` request
30 |
31 | * 1.65.x
32 | * Clarify handling of multiple filters in the `SetExceptionBreakpoints` request
33 | * Clarify lifetimes of objects created outside of suspended states
34 | * Add a `BreakpointMode` for setting different types of breakpoints
35 |
36 | * 1.64.x
37 | * Clarify that the `offset` in the `InstructionBreakpoint` is given in bytes
38 | * Add a `presentationHint` to the `DisassembledInstruction`
39 | * Add a `reason` to the `Breakpoint` to indicate why verification may have failed
40 |
41 | * 1.63.x
42 | * Add `memoryReference` support to the `SetVariableResponse`/`SetExpressionResponse`
43 | * Fix a typo in the description of `BreakpointLocationsArguments`
44 | * Fix missing line break in `CancelRequest`
45 | * Clarify `memoryReference` in `Variable` type
46 | * Clarify state of "object ID"s in `VariablePresentationHint`
47 |
48 | * 1.62.x
49 | * Clarify lifetime of `DataBreakpoint.dataId`
50 |
51 | * 1.61.x
52 | * Removed unused `ModulesViewDescriptor` interface
53 | * Clarify the applicability of `supportsVariablePaging`
54 | * Fix mention of non-existent `hitCondition` in `SetExceptionBreakpointsResponse`
55 |
56 | * 1.60.x
57 | * Clarify the usage of `hitCondition` and `logMessage` in `SetBreakpointsRequest`
58 |
59 | * 1.59.x:
60 | * Add an optional `frameId` to the `DataBreakpointInfoRequest`
61 | * Add `notStopped` as a well-known reason in `Response`
62 | * Clarify the lifetime of `variablesReference`.
63 | * Clarify the default behavior when `kind` is omitted from the `RunInTerminalRequest`.
64 | * Clarify end of file behavior for `readMemory`.
65 |
66 | * 1.58.x:
67 | * Specify the measurement unit of various `column` and "character positions" properties to be "UTF-16 code units".
68 |
69 | * 1.57.x:
70 | * Add the `argsCanBeInterpretedByShell` property to the `RunInTerminalRequest`
71 |
72 | * 1.56.x:
73 | * Add additional information to the `StepInTarget`
74 | * Clarification around wording for "clients"
75 | * Clarification around "falsey" in `CompletionItem.text`
76 | * Specify checksums to be given a hexadecimal strings, and timestamps as RFC 3339 date strings
77 | * Make wording on source.origin more clear to be non-exhaustive
78 |
79 | * 1.55.x:
80 | * Improved descriptions for `terminate` and `disconnect` requests.
81 | * Add missing value `variables` to the `context` argument of the `evaluate`request.
82 | * Fix a mistake in the description of the `ExceptionFilterOptions` type.
83 |
84 | * 1.54.x:
85 | * Add a new boolean property `lazy` on the `VariablePresentationHint`. Clients can use that flag to present the variable with a UI that supports a specific gesture to trigger its evaluation.
86 |
87 | * 1.53.x:
88 | * Add a new `detail` property on the CompletionItem
89 |
90 | * 1.52.x:
91 | * clarify comment for `Variable.value`.
92 |
93 | * 1.51.x:
94 | * Add a new category `important` to the `output` event. This is a hint for clients to show the message with a highly visible UI.
95 | * Clarify the description of all execution control requests (`continue`, `next`, `stepIn`, `stepOut`, `stepBack`, `reverseContinue`)
96 | * Add a new capability `supportsSingleThreadExecutionRequests` to indicate that the execution control requests support the `singleThread` property.
97 | * Add a new optional `singleThread` property to all execution control requests.
98 |
99 | * 1.49.x:
100 | * Add `memory` event and a corresponding **client** capability `supportsMemoryEvent`.
101 |
102 | * 1.48.x:
103 | * Add guidance for the case that a debug adapter implements both `setVariable` and `setExpression` and clients need to decide which request to use.
104 | * Add `writeMemory` request and a corresponding `supportsWriteMemoryRequest` capability.
105 |
106 | * 1.47.x:
107 | * The `setExceptionBreakpoints` can now optionally return an array of `Breakpoint`s as the other `setXxxxBreakpoints` do. This allows clients to show validation error messages for individual exception breakpoints or filters.
108 | * The `restart` request got a new optional parameter `arguments` where a client can pass the latest version of a launch or attach configuration.
109 | * Adds a new optional argument `suspendDebuggee` to the `disconnect` request. If a debug adapter has opted into this feature with the `supportSuspendDebuggee` capability, a client can use this to control whether the debuggee should be suspended when the debugger is disconnected.
110 |
111 | * 1.46.x:
112 | * Add an optional attribute `hitBreakpointIds` to the `stopped` event which contains the ids of the breakpoints that triggered the event.
113 |
114 | * 1.45.x:
115 | * Add new UI attribute `description` and `conditionDescription` to the `ExceptionBreakpointsFilter`. With these clients can display additional information about exception breakpoints.
116 | * Improved description for `setExceptionBreakpoints` request by adding guidance for what an adapter should do if the user inputs an invalid exception breakpoint condition.
117 | * Add new optional boolean property `canRestart` to the stack frame. It indicated whether the stack frame can be restarted with the `restart`request.
118 |
119 | * 1.44.x:
120 | * Deprecated the value `dataBreakpoint` of `VariablePresentationHint.kind`. Instead a new value `hasDataBreakpoint` has been added to the `VariablePresentationHint.attribute`.
121 |
122 | * 1.43.x:
123 | * Add support for conditional exceptions. With this the `setExceptionBreakpoints` request got a new property `filterOptions` for setting the exception filters and their conditions. The corresponding capability is `supportsExceptionFilterOptions`.
124 | * Clarify the description of the `stackTrace` request and its `totalFrames` property.
125 | * Clarify the description of the `cwd` property of the `runInTerminal` request: a client is only expected to execute a change directory command if `cwd` contains a non-empty, valid path.
126 |
127 | * 1.42.x:
128 | * Add `invalidated` event and a corresponding **client** capability `supportsInvalidatedEvent`.
129 |
130 | * 1.41.x:
131 | * Add "stepping granularity" support for the stepping requests `next`, `stepIn`, `stepOut`, `stepBack` and a corresponding **client** capability `supportsSteppingGranularity`.
132 | * Add instruction breakpoints and a corresponding **client** capability `supportsInstructionBreakpoints`.
133 |
134 | * 1.40.x:
135 | * New value `clipboard` for `context` argument of `evaluate` request.
136 | * Add support for reporting progress via `progressStart`, `progressUpdate`, and `progressEnd` events and a corresponding **client** capability `supportsProgressReporting`. Progress can be cancelled via a new `progressId` argument for the `cancel` request.
137 | * Clarified descriptions of all optional requests, events, and attributes to make clear what is the corresponding capability.
138 |
139 | * 1.39.x:
140 | * Add optional `selectionStart` and `selectionLength` attributes to completion item. With these attributes the selection range or position can be controlled after the completion text has been inserted.
141 | * Add optional `group` attribute to `output` event in order to keep an output log organized by grouping related messages.
142 |
143 | * 1.38.x:
144 | * Fixes some typos and improves some comments.
145 |
146 | * 1.37.x:
147 | * Adds a `breakpointLocations` request (and a corresponding `supportsBreakpointLocationsRequest` capability) for finding the possible breakpoints for a source range.
148 | * Adds cancellation support for requests via a new `cancel` request and a corresponding `supportsCancelRequest` capability.
149 | * Improves some comments.
150 |
151 | * 1.36.x:
152 | * Introduces a capability `completionTriggerCharacters` for announcing the characters that a frontend UI should use to trigger completion.
153 | * Adds an optional `sortText` attribute to the `CompletionItem` type.
154 | * In the schema change "number" to "integer" in cases where a float makes no sense, e.g. for IDs.
155 |
156 | * 1.35.x:
157 | * Adds an optional `presentationHint` attribute to the `Scope` type which can be used to add semantic to the scope's contents. An example is to mark a scope as a "registers" scope that contains "registers" instead of variables.
158 | * Adds experimental support for memory access via a new `readMemory` request and a corresponding `supportsReadMemoryRequest` capability.
159 | * Adds experimental support for memory disassembly via a new `disassemble` request and a corresponding `supportsDisassembleRequest` capability.
160 |
161 | * 1.34.x:
162 | * Adds support for data breakpoints via the 'dataBreakpointInfo' and 'setDataBreakpoints' requests and the 'supportsDataBreakpoints' capability.
163 | * Improves some comments.
164 |
165 | * 1.33.x:
166 | * Point out that the breakpoint's `id` attribute is mandatory when `breakpoint` events are used.
167 | * Return a new attribute `shellProcessId` from the `runInTerminal` request.
168 |
169 | * 1.32.x:
170 | * Adds an optional boolean argument `restart` to the `terminate` and `disconnect` requests. The value `true` indicates that the `terminate` or `disconnect` request is part of a restart sequence.
171 | * Move specification to DAP web site.
172 |
173 | * 1.31.x:
174 | * Adds a new optional `terminate` request which can be used to give a debuggee the chance to shutdown gracefully. A corresponding `supportsTerminateRequest` capability announces that an adapter implements the request.
175 |
176 | * 1.30.x:
177 | * Comment cosmetics.
178 |
179 | * 1.29.x:
180 | * Adds a new value for the 'reason' attribute of the 'stopped' event. This is used when an adapter implements the 'goto' request.
181 |
182 | * 1.28.x:
183 | * Adds an optional attribute `clientName` to the `Initialize` request. This makes it possible to surface the human readable name of the client in error messages coming from the adapter.
184 | * Adds a `terminateThreads` request and a corresponding `supportsTerminateThreadsRequest` capability.
185 | * Made the `__restart` attribute official on the `launch` or `attach` requests. It corresponds to the `restart` attribute on the `terminated` event.
186 | * Adds a `setExpression` request and a corresponding `supportsSetExpression` capability. This request can be used to assign a value to an assignable expression (aka "l-value").
187 | * Adds a new optional `preserveFocusHint` to the `stopped` event. A value of true hints to the frontend that this event should not change the focus.
188 |
189 | * 1.27.x:
190 | * Adds a new `capabilities` event that hints to the frontend that one or more capabilities got updated.
191 | * Initial support for logPoints: new attribute `SourceBreakpoint.logMessage` and capability `supportsLogPoint`.
192 |
193 | * 1.26.x:
194 | no protocol changes
195 |
196 | * 1.25.x:
197 | * Adds a new enum value `virtual` for the `presentationHint` attribute of type `Variable`.
198 | * To remove env variables from the environment support a 'null' value for `env` attribute in `runInTerminal` request.
199 |
200 | * 1.24.x:
201 | * Adds `removed` to the value set of the `reason` attribute of the `BreakpointEvent`.
202 | * Adds a `locale` attribute to the `initialize` request. The adapter can use this information to translate user visible information.
203 |
204 | * 1.23.x:
205 | * Adds a `source`, `line`, and `column` attributes to the `Output` event. With this a frontend can show a link to the source where the output was generated.
206 | * Adds support for retrieving loaded scripts and receiving loaded script events (`LoadedSourcesRequest`, `LoadedSourceEvent`).
207 | * Adds display hints for variables and evaluation results (type `VariablePresentationHint`).
208 |
209 | * 1.22.x:
210 | * Adds a new enum value `normal` for the `presentationHint` attribute of type `Source`.
211 | * Adds a new event `process` that conveys process ID and other information about the debuggee.
212 |
213 | * 1.21.x:
214 | * Adds optional attribute `includeAll` to type `StackFrameFormat`. With this the `StackTraceRequest` can be parameterized to include all stack frames, including those the DA might otherwise hide.
215 | * Adds capability `supportsDelayedStackTraceLoading` that indicates that a debug adapter supports the delayed loading of parts of the stack. This requires that both the `startFrame` and `levels` arguments and the `totalFrames` result of the `StackTraceRequest` are supported.
216 |
217 | * 1.20.x:
218 | * Extends the type of the `TerminatedEvent.body.restart` attribute from `boolean` to `any`. This makes it possible to loop arbitrary data from one debug session to the next.
219 | * Adds a new enum value `subtle` for the `presentationHint` attribute of type `StackFrame`.
220 |
221 | * 1.19.x:
222 | * Adds a new optional argument `terminateDebuggee` to the `disconnect` request. If a debug adapter has opted into this feature with the 'supportTerminateDebuggee' capability, a client can use this to control whether the debuggee should be terminated when the debugger is disconnected.
223 |
224 | * 1.18.x:
225 | * Adds optional attribute `source` to the `SourceArguments`.
226 | * Made StoppedEvent's `reason` attribute robust against translation by introducing a new `description` attribute.
227 | * Add a new optional attribute `presentationHint` to the `StackFrame` type. This attribute can be used to control how the frame is rendered in the UI.
228 |
229 | * 1.17.x:
230 | * Adds optional attribute `clientID` to the `InitializeRequestArguments`.
231 | * Adds support for obtaining exception details: `ExceptionInfoRequest`, `ExceptionDetails`.
232 | * Adds optional parameter `format` to the `SetVariableRequest`.
233 |
234 | * 1.16.x:
235 | * Updated comments for `path` and `sourceReference` attributes of `Source` type (the frontend no longer needs to have a notion of 'internal' modules; it just loads the content of a Source either through the sourceReference or the path).
236 | * Adds optional `presentationHint` attribute to `Source` type. This allows to control how the frontend shows a source reference in th UI.
237 | * Removed `SHA1Normalized`and `SHA256Normalized` values from type `ChecksumAlgorithm`.
238 |
239 | * 1.15.x:
240 | * Adds a `reverseContinue` request.
241 | * Adds a `restart` request and a corresponding `supportsRestartRequest` capability.
242 | * Adds a `variablesReference` attribute to the `OutputEvent`.
243 | * Adds support for exception configuration options.
244 | * Adds formatting options support for values returned from `VariablesRequest`, `EvaluateRequest`, and `StackTraceRequest`.
245 |
246 | * 1.14.x:
247 | * Adds optional `type` attribute to the `SetVariableResponse` type.
248 | * Support to return a structured object from the `SetVariableRequest`.
249 | * Fine tuning of `Module` part of the protocol.
250 | * Adds optional attribute `evaluatable` to `Variable` type.
251 | * Adds optional checksum support to `Source` type.
252 | * Adds optional source range to `Scope` type.
253 |
254 | * 1.13.x:
255 | * Fix typo in `Capabilities` type.
256 | * Adds an optional `hitCondition` attribute to breakpoints and a corresponding `supportsHitConditionalBreakpoints`capability.
257 |
258 | * 1.12.x:
259 | * Adds a new optional attribute `frameId` to the `completionRequest`.
260 | * Introduces a `runInTerminalRequest` so that a debug adapter can run a debuggee in a terminal managed by the frontend.
261 | * Adds a `type` attribute (and a value set) to the `CompletionItem`.
262 |
263 | * 1.11.x:
264 | * Adds a new optional attribute `mimeType` to the `SourceResponse`.
265 | * Adds a new optional attribute `sourceModified` to the `SetBreakpointsArguments` that indicates that the underlying source has been modified which results in new breakpoint locations.
266 | * Adds a new optional attribute `supportsVariableType` to `InitializeRequestArguments`. True indicates that the client shows the variable's type attribute in the UI.
267 | * Adds optional 'type' attribute to the `EvaluateResponse`.
268 | * Introduces the `RestartFrameRequest` and a corresponding `supportsRestartFrame` capability.
269 | * Introduces a `ContinuedEvent` so that a debug adapter can explicit trigger that a thread has continued execution.
270 | * Adds support for step in targets (request `StepInTargetsRequest`, type `StepInTarget`, capability `supportsStepInTargetsRequest`)
271 | * Adds support for goto targets (requests `GotoTargetsRequest` and `GotoRequest`, type `GotoTarget`, capability `supportsGotoTargetsRequest`)
272 | * Adds support for variable paging, that is named and indexed children of a variable can be requested in pages (chunks).
273 | * Adds experimental support for completion proposals.
274 |
275 | * 1.10.x:
276 | * Introduces a `stepBack` request and a corresponding `supportsStepBack` capability.
277 | * Introduces the type `Module`, a `ModuleRequest`, and a `ModuleEvent`
278 | * Introduces the `setVariableRequest`
279 | * Adds new optional attributes `type` and `kind` for a `Variable`.
280 | * Adds optional attributes `endLine` and `endColumn` to `StackFrame` and `Breakpoint` types.
281 |
282 | * 1.9.x:
283 | * Introduces a `allThreadsContinued` attribute on the `ContinueResponse` to indicate that all threads are continued and not only the one specified.
284 |
285 | * 1.8.x:
286 | * Introduces `ExceptionBreakpointsFilter` and fixed corresponding capability.
287 | * Adds optional `noDebug` attribute to `LaunchRequestArguments`.
288 | * Adds optional `startFrame` argument to `StackTraceArguments` to allow for paging.
289 | * Adds optional `totalFrames` argument to `StackTraceResponse` to allow for paging.
290 | * Improve comment: `InitializedEvent` must not be sent before `InitializeRequest` has returned its result.
291 |
292 | * 1.7.x:
293 | * Adds optional `url` and `urlLabel` attributes to the error messages. The frontend will show this as a UI to open additional information in a browser.
294 | * Added option `default` attribute to the `exceptionBreakpointFilters` capability.
295 | * Adds optional attribute `allThreadsStopped` to the `StoppedEvent` to indicate that all threads are stopped (and not only the one mentioned in the event).
296 |
297 | * 1.6.x:
298 | * A boolean `supportsConditionalBreakpoints` in `Capabilities` indicates whether the debug adapter supports conditional breakpoints.
299 | * Adds an optional `exceptionBreakpointFilters` capability that lists the filters available for the `setExceptionBreakpoints` request.
300 | * Adds an optional `restart` attribute to the `TerminatedEvent` which can be used to request a restart of the debug session.
301 |
302 | * 1.5.x:
303 | * A boolean `supportsFunctionBreakpoints` in `Capabilities` indicates whether the debug adapter implements the function breakpoints.
304 | * Renamed `supportEvaluateForHovers` in `Capabilities` to `supportsEvaluateForHovers`.
305 |
306 | * 1.4.x:
307 | * Made the `body` of the `InitializeResponse` optional (for backward compatibility).
308 |
309 | * 1.3.x: Version introduces support for feature negotiation.
310 | * The `InitializeResponse` has now attributes for these features:
311 | * A boolean `supportsConfigurationDoneRequest` indicates whether the debug adapter implements the `ConfigurationDoneRequest`.
312 | * A boolean `supportEvaluateForHovers` indicates whether the debug adapter supports a side effect free `EvaluateRequest`.
313 | * Adds an optional `data` attribute to the `OutputEvent` and a `telemetry` category.
314 | * Adds a new context type `hover` to the `context` attribute of the `EvaluateArguments`.
315 |
316 | * 1.2.x: Version adds a new request:
317 | * Introduces a `ConfigurationDoneRequest` that VS Code sends to indicate that the configuration of the debug session has finished and that debugging can start.
318 |
319 | * 1.1.x: Version adds support for conditional breakpoints and breakpoints in virtual documents:
320 | * Type `Source` supports optional `origin` attribute to provide information that is shown in the debug UI.
321 | * Type `Source` supports an optional `adapterData` attribute that the VS Code debug UI will transparently persists for breakpoints.
322 | * Introduces type `SourceBreakpoint` that makes it possible to provide `column` and `condition` information when specifying a breakpoint.
323 |
324 | * 1.0.1: Initial version of the debug protocol
325 |
--------------------------------------------------------------------------------
/img/stop-continue-terminate.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/img/init-launch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------