TOC
Summary
In previous post, I wrote about how to debug C/Objective-C with LLDB CLI.
This time I will try the operation from Emacs with dap-mode and dap-lldb.
Demo:
Prerequisites
- macOS Big Sur (v11.6.2, Intel CPU)
- GNU Emacs v27.2
- dap-mode v20211117.1555 (melpa)
- leaf v20211226.1633 (melpa)
- LLDB VSCode v0.2.3
Steps
The dap-lldb require lldb-vscode
that is developed by the LLVM project.
- Install
lldb-vscode
. Select plan the belows:- Plan A: Install LLDB VSCode extension that include
lldb-vscode
of the binary file in VSCode.- LLDB VSCode’s lldb is v9.0.0. Therefore lldb-vscode is old.
- By the way, CodeLLDB that is similar VSCode extension. It doesn’t include
lldb-vscode
.
- Plan B: Build
lldb-vscode
by yourself.lldb-vscode
is distributed on llvm/llvm-project.
- Plan A: Install LLDB VSCode extension that include
- Install
dap-mode
package that contain dap-lldb on Emacs. - Add configuration for dap-mode in
init.el
. - Add
dap-register-debug-template
.
init.el:
(leaf dap-mode
:ensure t
:init
(dap-mode 1)
(dap-tooltip-mode 1)
(dap-auto-configure-mode 1)
(dap-ui-controls-mode 1)
:require t dap-lldb
:bind
(:dap-mode-map
([f5] . dap-debug)
("M-d i" . dap-step-in)
("M-d o" . dap-step-out)
("M-d n" . dap-next)
("M-d g" . dap-continue)
("M-d t" . dap-breakpoint-toggle))
:config
(leaf dap-ui
:ensure nil
:require t
:config
(dap-ui-mode 1))
:custom
(dap-auto-configure-features . '(sessions locals breakpoints expressions repl controls tooltip))
(dap-lldb-debug-program . `(,(expand-file-name "~/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb-vscode"))))
dap debug template:
;; Eval Buffer with `M-x eval-buffer' to register the newly created template.
(dap-register-debug-template
"LLDB::Run"
(list :type "lldb-vscode"
:cwd "/path/to/your/code/emacs"
:request "launch"
:args (list "-Q")
:program "nextstep/Emacs.app/Contents/MacOS/Emacs"
:name "LLDB::Run"))
Option
$ ~/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb --version
lldb version 9.0.0 (https://llvm.org/svn/llvm-project/lldb/trunk revision 364465)
clang revision 364468
llvm revision 364469
$ codesign -vv ~/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb
/Users/hiroakit/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb: code object is not signed at all
In architecture: x86_64
$ codesign -vv ~/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb-vscode
/Users/hiroakit/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb-vscode: code object is not signed at all
In architecture: x86_64
$ otool -L ~/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb-vscode
/Users/hiroakit/.vscode/extensions/lanza.lldb-vscode-0.2.3/bin/darwin/bin/lldb-vscode:
@rpath/liblldb.9.0.0svn.dylib (compatibility version 0.0.0, current version 9.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)