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.
- 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 (except for jsonrpc which is part of emacs but needed version is not part of latest stable emacs release 29.1-1 but available on elpa)
And with (setq dape-buffer-window-arrangement 'gud)
+ corfu
as completion-in-region-function
.
Screenshots taken with modus-operandi-tinted.
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-arrangement 'gud)
:config
;; Info buffers to the right
;; (setq dape-buffer-window-arrangement 'right)
;; To not display info and/or buffers on startup
;; (remove-hook 'dape-on-start-hooks 'dape-info)
;; (remove-hook 'dape-on-start-hooks 'dape-repl)
;; To display info and/or repl buffers on stopped
;; (add-hook 'dape-on-stopped-hooks 'dape-info)
;; (add-hook 'dape-on-stopped-hooks 'dape-repl)
;; By default dape uses gdb keybinding prefix
;; If you do not want to use any prefix, set it to nil.
;; (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)
)
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.
In theory all debug adapters should be compatible with Dape
.
- 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.
See delve installation. For more information see documentation.
- 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.
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.
Install debugpy with pip `pip install debugpy`
See options.
Configure debug adapter port under “Editor” -> “Editor Settings” -> “Debug Adapter”.
See for installation https://docs.flutter.dev/get-started/install
See https://github.com/Samsung/netcoredbg for installation
Install with gem install debug
.
See https://github.com/ruby/debug for more information
See https://github.com/eclipse-jdtls/eclipse.jdt.ls for installation of JDTLS.
See https://github.com/microsoft/java-debug for installation of the Java Debug Server plugin.
The Java config depends on Eglot running JDTLS with the plugin prior to starting Dape.
Extend eglot-server-programs
as follows to have JDTLS load the plugin:
(add-to-list 'eglot-server-programs
`((java-mode java-ts-mode) .
("jdtls"
:initializationOptions
(:bundles ["/PATH/TO/java-debug/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-VERSION.jar"]))))
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.
Before reporting any issues take a look at *dape-repl*
buffer. Master is used is for all case and purposes a development branch still and releases on elpa should be more stable so in the mean time use elpa if the bug is a breaking you workflow.
Big thanks to João Távora for the input and jsonrpc; the project wouldn’t be where it is without João.