Dape - Debug Adapter Protocol for Emacs
Use dape-configs
to set up your debug adapter configurations.
To initiate debugging sessions, use the command dape
.
For complete functionality, activate eldoc-mode
in your source buffers and enable repeat-mode
for ergonomics.
Features
- Log breakpoints
- Conditional breakpoints
- Variable explorer
- Variable watch
- Variable hover with
eldoc
- REPL
- gdb-mi like interface
- Memory viewer with
hexl
compile
integration- Debug adapter configuration ergonomics
- No dependencies
And with (setq dape-buffer-window-arrangment 'gud)
+ corfu
as completion-in-region-function
.
Screenshots taken with modus-operandi-tinted.
Configuration
Currently Dape
does not come with any debug adapter configuration.
(use-package dape
;; To use window configuration like gud (gdb-mi)
;; :init
;; (setq dape-buffer-window-arrangment 'gud)
:config
;; Info buffers to the right
;; (setq dape-buffer-window-arrangment 'right)
;; To remove info buffers
;; (remove-hook 'dape-update-ui-hooks 'dape-info-update)
;; To remove repl buffer on startup
;; (remove-hook 'dape-on-start-hooks 'dape-repl)
;; By default dape uses gdb keybinding prefix
;; (setq dape-key-prefix "\C-x\C-a")
;; Kill compile buffer on build success
;; (add-hook 'dape-compile-compile-hooks 'kill-buffer)
;; Save buffers on startup, useful for interpreted languages
;; (add-hook 'dape-on-start-hooks
;; (defun dape--save-on-start ()
;; (save-some-buffers t t)))
;; Projectile users
;; (setq dape-cwd-fn 'projectile-project-root)
)
Differences with dap-mode
dap-mode is the most popular alternative and is of course much more mature and probably more feature rich (have not used dap-mode
extensively).
Dape has no dependencies outside of packages included in emacs, and tries to use get as much out of them possible.
Dape takes a slightly different approach to configuration.
- Dape does not support
launch.json
files, if per project configuration is needed usedir-locals
. - Tries to simplify configuration, by having just a plist.
- Dape tries to improve config ergonomics in
dape
completing-read by using options to change/add plist entries in an already existing config, example:adapter-config :program "/home/user/b.out" compile "gcc -g -o b.out main.c"
. - No magic, no special variables. Instead, functions and variables are resolved before starting a new session.
- Tries to be envision to how debug adapter configuration would be implemented in emacs if vscode never existed.
Supported debug adapters
In theory all debug adapters should be compatible with Dape
.
Javascript - vscode-js-*
- Install `node`
- Visit https://github.com/microsoft/vscode-js-debug/releases/ and download the asset `js-debug-dap-<version>.tar.gz`
- Unpack `mkdir -p ~/.emacs.d/debug-adapters && tar -xvzf js-debug-dap-<version>.tar.gz -C ~/.emacs.d/debug-adapters`
For more information see OPTIONS.md.
Go - dlv
See delve installation. For more information see documentation.
C, C++ and Rust - codelldb
- Download latest
vsix
release for your platform `codelldb-<platform>-<os>.vsix` - Unpack `mkdir -p ~/.emacs.d/debug-adapters && unzip codelldb-<platform>-<os>.vsix -d ~/.emacs.d/debug-adapters/codelldb`
See manual for more information.
C and C++ - cpptools
Download latesnd unpack vsix
file with your favorite unzipper.
- Download latest
vsix
release for your platform `cpptools-<platform>-<os>.vsix` - Unpack `mkdir -p ~/.emacs.d/debug-adapters && unzip cpptools-<os>-<platform>.vsix -d ~/.emacs.d/debug-adapters/cpptools`
- Then `chmod +x ~/.emacs.d/debug-adapters/cpptools/extension/debugAdapters/bin/OpenDebugAD7`
- And `chmod +x ~/.emacs.d/debug-adapters/cpptools/extension/debugAdapters/lldb-mi/bin/lldb-mi`
See options.
Python - debugpy
Install debugpy with pip `pip install debugpy`
See options.
Godot
Configure debug adapter port under “Editor” -> “Editor Settings” -> “Debug Adapter”.
Dart - flutter
See for installation https://docs.flutter.dev/get-started/install
C# - netcoredbg
See https://github.com/Samsung/netcoredbg for installation
Other untested adapters
If you find a working configuration for any other debug adapter please submit a PR.
See microsofts list for other adapters, your mileage will vary.
Roadmap
- More options for indicator placement
- Improving completion in REPL
- Usage of “setVariable” inside of
*dape-info*
buffer - Improve memory reader with auto reload and write functionality
- Individual thread controls
- Variable values displayed in source buffer, this seams to require integration with lsp-mode and eglot
Bugs and issues
Before reporting any issues take a look at *dape-debug*
buffer with all debug messages enabled.
(setq dape--debug-on '(io info error std-server))
.