doomemacs/modules/tools/debugger
Henrik Lissner ad6a3d0f33
refactor: deprecate featurep! for modulep!
featurep! will be renamed modulep! in the future, so it's been
deprecated. They have identical interfaces, and can be replaced without
issue.

featurep! was never quite the right name for this macro. It implied that
it had some connection to featurep, which it doesn't (only that it was
similar in purpose; still, Doom modules are not features). To undo such
implications and be consistent with its namespace (and since we're
heading into a storm of breaking changes with the v3 release anyway),
now was the best opportunity to begin the transition.
2022-08-14 20:43:35 +02:00
..
autoload refactor: deprecate featurep! for modulep! 2022-08-14 20:43:35 +02:00
config.el refactor: deprecate featurep! for modulep! 2022-08-14 20:43:35 +02:00
doctor.el refactor: deprecate featurep! for modulep! 2022-08-14 20:43:35 +02:00
packages.el refactor: deprecate featurep! for modulep! 2022-08-14 20:43:35 +02:00
README.org revert: fix(docs): set mode in file-local vars 2022-08-07 19:08:07 +02:00

:tools debugger

Description   unfold

Introduces a code debugger to Emacs, powered by realgud or dap-mode (LSP).

This document will help you to configure dap-mode Native Debug(GDB/LLDB) as there is still not enough documentation for it.

Maintainers

This module has no dedicated maintainers. Become a maintainer?

Module flags

+lsp
Enable support for Debug Adapter Protocol (DAP) debuggers.

TODO Hacks

🔨 This module's hacks haven't been documented yet. Document them?

TODO Changelog

This module does not have a changelog yet.

TODO Installation

🔨 This module's prerequisites documentation is incomplete. Complete it?

Enable this module in your doom! block.

Make sure all of these pre-requirements is in your $PATH:

  • nodejs
  • lldb and lldb-mi (optional)
  • gdb (optional), requires unzip

If you are getting an error like Searching for program no such file or directory "node", then you need nodejs (emacs-lsp/dap-mode#79).

Realgud debuggers

lldb and lldb-mi

This is optional if you want to debug with LLDB. Install lldb and lldb-mi.

gdb

This is optional if you want to debug with GDB. Install gdb.

You will need unzip for dap-gdb-lldb-setup. It downloads a VS-Code extension and it needs to extract compressed downloaded file.

You need this if you are having "wrong-type-argument stringp nil" error when calling dap-gdb-lldb-setup. See emacs-lsp/dap-mode#313

DAP debuggers

Python

DAP expects ptvsd by default as the Python debugger, but debugpy is recommended. See Configuration.

installing ptvsd:

pip3 install ptvsd --user

install debugpy:

pip3 install debugpy --user
;; in $DOOMDIR/config.el
(after! dap-mode
  (setq dap-python-debugger 'debugpy))

C, C++, Rust, Golang

Needs lldb-vscode. Install LLDB from your package manager.

Fedora:

dnf install lldb

TODO Usage

🔨 This module's usage documentation is incomplete. Complete it?

  • M-x +debugger/start
  • M-x +debugger/start-last
  • M-x +debugger/quit

Realgud

  1. Call dap-gdb-lldb-setup function.
  2. Use dap-debug-edit-template to configure debugging settings for your project. Available settings can be inspected here. Call eval-buffer to save your settings. Don't save the file!
  3. Call dap-debug, select a configuration and start debugging.

dap-mode with +lsp

Intuitive and powerful debugging.

  • Breakpoints
  • REPL
  • local variable view: Allows you to browse variables in the current stack frame.
  • expressions: Add expressions to either watch variables or generic expressions.

Keybindings

(map! :map dap-mode-map
      :leader
      :prefix ("d" . "dap")
      ;; basics
      :desc "dap next"          "n" #'dap-next
      :desc "dap step in"       "i" #'dap-step-in
      :desc "dap step out"      "o" #'dap-step-out
      :desc "dap continue"      "c" #'dap-continue
      :desc "dap hydra"         "h" #'dap-hydra
      :desc "dap debug restart" "r" #'dap-debug-restart
      :desc "dap debug"         "s" #'dap-debug

      ;; debug
      :prefix ("dd" . "Debug")
      :desc "dap debug recent"  "r" #'dap-debug-recent
      :desc "dap debug last"    "l" #'dap-debug-last

      ;; eval
      :prefix ("de" . "Eval")
      :desc "eval"                "e" #'dap-eval
      :desc "eval region"         "r" #'dap-eval-region
      :desc "eval thing at point" "s" #'dap-eval-thing-at-point
      :desc "add expression"      "a" #'dap-ui-expressions-add
      :desc "remove expression"   "d" #'dap-ui-expressions-remove

      :prefix ("db" . "Breakpoint")
      :desc "dap breakpoint toggle"      "b" #'dap-breakpoint-toggle
      :desc "dap breakpoint condition"   "c" #'dap-breakpoint-condition
      :desc "dap breakpoint hit count"   "h" #'dap-breakpoint-hit-condition
      :desc "dap breakpoint log message" "l" #'dap-breakpoint-log-message)

TODO Configuration

🔨 This module has no configuration documentation yet. Write some?

Troubleshooting

  • There is a known issue with the +debugger/start command, which is bound to SPC o d right now. It prints "No debugging session to quit" no matter what.

Frequently asked questions

This module has no FAQs yet. Ask one?

TODO Appendix

🔨 This module has no appendix yet. Write one?