编译用 emacs 自带的 compile, 运行用 shell-command ,调试用 dap-mode
dap-mode 似乎是依赖于 lsp-mode
的,是不是会影响 lsp-bridge
的使用?
确实依赖 lsp-mode, 但是可以在不启动 lsp-mode 的情况下使用 dap-debug
不知道有没有用web-mode的小伙伴, 我这里补全时会有很高的几率吃掉一些字符,比如吃掉换行符,后面的行会跑上来, 常见于 script 内, 已经精减了emacs配置, 只留lsp-bridge, 依然能够重现.
可以发一下最小稳定重现的压缩包吗?
lsp-brdige能和dap-mode配合调试吗?如果能,需要怎么安装和配置?
需要安装lsp-mode但又不启动 lsp-mode,这种方案丑陋又怪异
我不用dap-mode,不知道怎么弄
把 lsp-mode 当成 dap-mode 的依赖库就行了。
这种方式确实不太优雅,不过对我来说能用就行,没有时间去实现一个独立的 dap
我是直接开启了lsp-mode和lsp-bridge,然后禁用掉lsp-mode的补全等一些功能,这样就是内存可能用多了,然后有点怪,但是可以使用dap-mode。相关配置如下:
(use-package lsp-mode
:init
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
(setq lsp-keymap-prefix "C-c l")
;; (setq lsp-completion-enable nil)
(setq lsp-headerline-breadcrumb-enable nil)
(setq lsp-completion-provider :none)
(setq lsp-modeline-diagnostics-enable nil)
(setq lsp-modeline-code-actions-enable nil)
(setq lsp-lens-enable nil)
:hook (;; replace XXX-mode with concrete major-mode(e. g. python-mode)
(dart-mode . lsp)
(haskell-mode . lsp)
;; if you want which-key integration
(lsp-mode . lsp-enable-which-key-integration))
:commands (lsp lsp-deferred))
;; Debug
(use-package dap-mode)
;; UI
(use-package lsp-ui :commands lsp-ui-mode)
大家可以说一下都用 dap-mode 的哪些功能? 还有都在哪些语言用 dap-mode ?
也许我下半年有空的时候可以用 lsp-bridge 类似的技术开发一个完全异步的调试框架。
以前之所以没有弄, 主要是公司的事情太多了, 下班修复 EAF lsp-bridge 的issue基本上把我业余时间全部占满了。 还有一个原因跟我自己的坏习惯有关, 我调试代码除非是崩溃的代码, 日常逻辑代码都用目测。
其实 dap-mode 的效果和 emacs 的 gdb-many-windows 效果差不多,但是支持的语言远超 gdb。它可以为所有 dap 协议支持的语言提供一个统一的、美观的调试方法,能把调试信息可视化(省的再去敲命令了)
我平常写代码比看代码多,所以调试器用的少。
是我犯了个低级错误, 我机器上有两版web-mode, 以为加载的是新版, 实际加载的是, 14.*, 改为加载17.*后问题解决. 顺便赞一下大神的作品, 以前试过多种方案补全, 都放弃了, 只有 lsp-bridge 甚至造越了期望值!!!
我主要是用 DAP 跑 Rails 项目的某个单元测试,调试某个具体问题,这是我的 launch.json 以备参考:
{
"version": "0.2.0",
"configurations": [
{
"name": "RSpec Function",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceFolder}",
"program": "${workspaceFolder}/bin/bundle",
"args": ["exec", "rspec", "${relativeFile}:${lineNumber}"]
},
{
"name": "Rails Server",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceFolder}",
"program": "${workspaceFolder}/bin/rails",
"args": ["server"]
}
]
}
还有个用途是在编辑器调试 Chrome Debug 模式打开的前端页面:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "chrome",
"request": "launch",
"cwd": "${workspaceFolder}",
"url": "http://localhost:5174",
"webRoot": "${workspaceFolder}/src",
"runtimeExecutable": "/home/xinyifly/.nix-profile/bin/google-chrome-stable",
"runtimeArgs": ["--remote-debugging-port=9222"]
}
]
}
需要注意的是,很多语言的 DAP 都需要对应语言安装一个相应的调试库,比如 Ruby 需要安装 ruby-debug-ide 这个 gem
神级程序员用目测
我主要在dart中使用断点,功能就是可以断点后查看各种属性的值。
今天使用 pyright-background-analysis, ruff 的多后端配置打开python文件时,发现 find-references 好像会生成两份相同的内容,而且还把定义放进去了?
find_define.py 文件中返回的定义位置似乎少了一行?不知道大佬能否修复一下
注:不是lsp-bridge-find-def跳转的位置少了1行,而是类FindDefine中返回的start_pos的line值少了一行
发可以重现的文件吧