我按照这个指南配置rust的代码编辑和调试:https://robert.kra.hn/posts/rust-emacs-setup/
代码浏览貌似可以,但调试遇到问题:下载的vscode extension 似乎不完整,每次大小都不一样,以至于 vscode/webfreak.debug 这个目录内容总是空的,这个有没有啥办法?
还有,除了用dap-mode, 是否可以用GUD 调试emacs, 有没有啥步骤指南?我 M-x gud-gdb ,然后 命令用 rust-gdb , 接着 gdb-many-windows 貌似不行,出来的小窗口内容都是空的
更新:我describe-function dap-gdb-lldb-setup ,找到源码里的下载链接,在页面下点击下载了webfreak.debug-0.25.1.vsix 文件, Ark 解压了这个zip文件,然后复制到 vscode/webfreak.debug 目录下,不知道会不会有问题。
问题是,接下来我M-x dap-debug 后,报错:
Could not start debugger process, does the program exist in filesystem?
Error: spawn lldb-mi ENOENT
这个错我参照的指南里面也提到过,说调试的对象不能用相对路径,不能包含~, 但我用/home/gym/greeting/target/debug/greeting 这样的路径还是报错
我参照的指南里提到 sudo DevToolsSecurity --enable
,我 gentoo 系统上没找到这个命令,不知道要咋搞。
更新:下面是 我运行 gym@gymDeskGentoo ~/greeting $ emacs -q --load ~/emacs-rust-config/standalone.el src/main.rs 后在emacs 的 rust-analyzer::stderr buffer里找到的错误消息
[ERROR flycheck] Flycheck failed to run the following command: "cargo" "clippy" "--workspace" "--message-format=json" "--manifest-path" "/home/gym/greeting/Cargo.toml" "--all-targets"
[ERROR rust_analyzer::main_loop] cargo check failed: Cargo watcher failed, the command produced no valid metadata (exit code: ExitStatus(unix_wait_status(25856)))
以及M-x dap-debug 后LLDB::Run stderr buffer 里找到的出错消息,
events.js:377
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at afterWriteDispatched (internal/stream_base_commons.js:156:25)
at writeGeneric (internal/stream_base_commons.js:147:3)
at Socket._writeGeneric (net.js:787:11)
at Socket._write (net.js:799:8)
at writeOrBuffer (internal/streams/writable.js:358:12)
at Socket.Writable.write (internal/streams/writable.js:303:10)
at MI2_LLDB.sendRaw (/home/gym/emacs-rust-config/.extension/vscode/webfreak.debug/extension/out/src/backend/mi2/mi2.js:766:32)
at /home/gym/emacs-rust-config/.extension/vscode/webfreak.debug/extension/out/src/backend/mi2/mi2.js:793:18
at new Promise (<anonymous>)
at MI2_LLDB.sendCommand (/home/gym/emacs-rust-config/.extension/vscode/webfreak.debug/extension/out/src/backend/mi2/mi2.js:780:16)
Emitted 'error' event on Socket instance at:
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
errno: -32,
code: 'EPIPE',
syscall: 'write'
}
Process LLDB::Run stderr finished