dape
- Description
- Debug Adapter Protocol for Emacs
- Latest
- dape-0.11.0.tar (.sig), 2024-May-02, 280 KiB
- Maintainer
- Daniel Pettersson <daniel@dpettersson.net>
- Atom feed
- dape.xml
- Website
- https://github.com/svaante/dape
- Browse ELPA's repository
- CGit or Gitweb
- Badge
To install this package from Emacs, use package-install
or list-packages
.
Full description
Dape
is a debug adapter client for Emacs. The debug adapter protocol, much like its more well-known counterpart, the language server protocol, aims to establish a common API for programming tools. However, instead of functionalities such as code completions, it provides a standardized interface for debuggers.
To begin a debugging session, invoke the dape
command. In the minibuffer prompt, enter a debug adapter configuration name from dape-configs
.
For complete functionality, make sure to enable eldoc-mode
in your source buffers and repeat-mode
for more pleasant key mappings.
1. Features
- Batteries included support (
describe-variable
dape-configs
) - Log breakpoints
- Conditional breakpoints
- Variable explorer
- Variable watch
- Variable hover with
eldoc
- REPL
- gdb-mi.el like interface
- Memory editor with
hexl
- Integration with
compile
- Debug adapter configuration ergonomics
- No external dependencies outside of core Emacs
With (setq dape-buffer-window-arrangement 'right)
:
And with (setq dape-buffer-window-arrangement 'gud)
+ corfu
as completion-in-region-function
:
With Minibuffer adapter configuration hints:
Screenshots taken with modus-operandi-tinted.
2. Configuration
Dape
includes pre-defined debug adapter configurations for various programming languages. Refer to dape-configs
for more details. If dape
doesn't include a configuration suitable for your needs, you can implement your own.
(use-package dape :preface ;; By default dape shares the same keybinding prefix as `gud' ;; If you do not want to use any prefix, set it to nil. ;; (setq dape-key-prefix "\C-x\C-a") :hook ;; Save breakpoints on quit ;; ((kill-emacs . dape-breakpoint-save) ;; Load breakpoints on startup ;; (after-init . dape-breakpoint-load)) :init ;; To use window configuration like gud (gdb-mi) ;; (setq dape-buffer-window-arrangement 'gud) :config ;; Info buffers to the right ;; (setq dape-buffer-window-arrangement 'right) ;; Global bindings for setting breakpoints with mouse ;; (dape-breakpoint-global-mode) ;; 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) ;; 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 (lambda () (save-some-buffers t t))) ;; Projectile users ;; (setq dape-cwd-fn 'projectile-project-root) )
3. Differences with dap-mode
Dape has no dependencies outside of core Emacs packages, and tries to use get as much out of them possible.
Dape takes a slightly different approach to configuration.
Dape
does not supportlaunch.json
files, if per project configuration is needed usedir-locals
anddape-command
.Dape
enhances ergonomics within the minibuffer by allowing users to modify or add PLIST entries to an existing configuration using options. For exampledape-config :cwd default-directory :program "/home/user/b.out" compile "gcc -g -o b.out main.c"
.- No magic, no special variables like
${workspaceFolder}
. Instead, functions and variables are resolved before starting a new session. - Tries to envision how debug adapter configurations would be implemented in Emacs if vscode never existed.
4. Supported debug adapters
In theory all debug adapters should be compatible with Dape
.
4.1. 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.
4.2. Go - dlv
See delve installation. For more information see documentation.
4.3. C, C++, Rust, and more - GDB
Ensure that your GDB version is 14.1 or newer. For further details, consult the documentation.
4.4. C, C++ and Rust - codelldb
4.5. C and C++ - cpptools
Download latesnd unpack vsix
file with your favorite unzipper.
- Download latest
vsix
release for your platformcpptools-<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.
4.6. Python - debugpy
Install debugpy with pip pip install debugpy
See options.
4.7. Godot
Configure debug adapter port under "Editor" > "Editor Settings" > "Debug Adapter".
4.8. Dart - flutter
See for installation https://docs.flutter.dev/get-started/install
4.9. C# - netcoredbg
See https://github.com/Samsung/netcoredbg for installation
4.10. Ruby - rdbg
Install with gem install debug
.
See https://github.com/ruby/debug for more information
4.11. Java - JDTLS with Java Debug Server plugin
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"]))))
4.12. 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.
5. Contribute
dape
is subject to the same copyright assignment policy as GNU Emacs.
Any legally significant contributions can only be merged after the author has completed their paperwork. See Contributor's Frequently Asked Questions (FAQ) for more information.
6. Bugs and issues
Before reporting any issues (setq dape-debug t)
and take a look at *dape-repl*
buffer. Please share your *dape-repl*
and *dape-connection events*
in the buffer contents with the bug report.
The master
branch is used as an development branch and releases on elpa should be more stable so in the mean time use elpa if the bug is a breaking you workflow.
7. Acknowledgements
Big thanks to João Távora for the input and jsonrpc; the project wouldn't be where it is without João.
Old versions
dape-0.10.0.tar.lz | 2024-Apr-04 | 53.7 KiB |
dape-0.9.0.tar.lz | 2024-Mar-31 | 53.2 KiB |
dape-0.8.1.tar.lz | 2024-Mar-13 | 52.1 KiB |
dape-0.7.0.tar.lz | 2024-Feb-23 | 48.3 KiB |
dape-0.6.1.tar.lz | 2024-Feb-12 | 47.3 KiB |
dape-0.6.0.tar.lz | 2024-Feb-10 | 47.3 KiB |
dape-0.5.0.tar.lz | 2024-Jan-23 | 46.3 KiB |
dape-0.4.0.tar.lz | 2024-Jan-17 | 45.6 KiB |
dape-0.3.0.tar.lz | 2023-Dec-22 | 41.1 KiB |
dape-0.2.2.tar.lz | 2023-Dec-05 | 39.0 KiB |
dape-0.2.tar.lz | 2023-Dec-05 | 38.8 KiB |