设置rust 调试,dap-gdb-lldb-setup 中下载文件不正常

我按照这个指南配置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 系统上没找到这个命令,不知道要咋搞。


更新:下面是 我运行 [email protected] ~/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

这个错: [ERROR flycheck] Flycheck failed to run the following command: “cargo” “clippy” “–workspace” “–message-format=json” “–manifest-path” “/home/gym/greeting/Cargo.toml” “–all-targets”

可能是因为我gentoo 上 dev-lang/rust 没带clippy USE flag, 我得加这个use flag 重装一下。我用了 debug USE flag, 重新编译时间会不会特别长?

dev-lang/rust-1.58.1::gentoo was built with the following:
USE="debug doc rls rust-src -clippy -dist (-miri) (-nightly) (-parallel-compiler) -rustfmt (-system-bootstrap) (-system-llvm) -test -verify-sig -wasm" ABI_X86="(64) -32 (-x32)" CPU_FLAGS_X86="sse2" LLVM_TARGETS="(X86) -AArch64 -AMDGPU -ARM -AVR -BPF -Hexagon -Lanai -MSP430 -Mips -NVPTX -PowerPC -RISCV -Sparc -SystemZ -WebAssembly -XCore"

更新:我把emacs脚本里 (lsp-rust-analyzer-cargo-watch-command “clippy”) 这一句给注释掉了,错误也就没了。我新手,还没体会到clippy啥用。

奇怪的是这次虽然dap-debug还是同样不行,之前的那一堆js 的callstack 却找不到了。anyway, 我实在没兴趣去看那些nodejs相关的东西。那里有GUD 调试 rust 的指南?还是这功能没实现?