大家都比较喜欢 lsp-bridge, 同时也有很多 lsp-bridge 的用户反馈能否做一个独立于 lsp-mode 的 dap-bridge 出来?
我今天稍微瞄了一下DAP协议, 还是挺复杂的, 估计坑的面积比 lsp-bridge 还要大, 因为DAP比LSP协议还要复杂的是, 微软自己加了一个调试器适配层, 而不是直接让编辑器和调试器沟通的。
所以, 希望用 dap-mode 的同学分享一下自己平常用的情况, 语言、截图、主要功能或者特别想要的功能都可以。
我先摸个底, 等我有时间, 我根据大家反馈的优先级, 把大家想要的功能先做了。
dap-bridge 的优点我估计有几个:
- 性能, 和 lsp-bridge 一样快, 永远不卡 Emacs
- 不依赖 lsp-bridge, 可以和其他模块组合用, 不像 dap-mode 那样死绑定 lsp-mode
- 开箱即用, 可以保证像 lsp-bridge 那样 require 就自动适配, 不需要折腾细节
17 个赞
感觉配置起来比较麻烦,一直没用过 dap-mode。
对我个人而言最重要的还是像lsp-bridge一样开箱即用,还直接支持single模式和project模式。前面在windows上用lsp-bridge,遇到问题解决不了想放弃,也试了lsp-mode和eglot,但最后还是回到lsp-bridge ,折腾了好几天把问题解决。没办法,开箱即用太香了。
2 个赞
不放个投票么,完全不用、有用但不刚需、非常想要 啥的。
Jerry
4
最想要的还是 many-windows,可以可视化地查看变量的值
(默认要一行行敲命令的调试方法感觉效率还不如传统print大法 )
1 个赞
book
5
在emacs中配置dap-mode,比较复杂。希望dap-bridge 能支持python和C++。
语言是dart,写flutter,根据途中标注需要的功能:
- 能直接点击创建和删除breakpoint,用快捷键也行
- 能展示已经创建的breakpoint,并可以捕捉crash
- 能显示断点时候各种变量的值,这个最重要
- 有下一步,进入方法,跳出方法,断开等功能
1 个赞
希望支持Typescript (通过vscode内置新js调试器),dap-mode的那个过时很久了。
我没用过 lsp-mode 也没有用过 dap-mode, 我试了下 realgud, 感觉还行诶(只是很浅地试过).
和vscode类似,一键启动调试,侧边有窗口观察变量,是否支持鼠标点击操作均可。
非常需要!!!
我现在就是用lsp-bridge + dsp-mode开发c++ qt程序
目前用lldb-vscode的模板,基本需求都能满足,和vscode共用.vscode文件夹下的 launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb-vscode",
"request": "launch",
"name": "Debug",
"program":"${workspaceFolder}/bin/main",
"cwd": "${workspaceFolder}/bin/",
"args": [""],
"environment":[
{
"name": "XDG_SESSION_TYPE",
"value": "x11"
}
]
},
{
"type": "lldb-vscode",
"request": "launch",
"name": "UT",
"program":"${workspaceFolder}/test/ut/bin/utest",
"cwd": "${workspaceFolder}/test/ut/bin",
"args": [""],
"environment":[
{
"name": "XDG_SESSION_TYPE",
"value": "x11"
}
]
}
]
}
目前的问题是无法一键编译和一键调试,都需要确认一下
调试过程中变量显示不方便,变量显示最好像visual studio一样有natvis文件定义,看了一下目前也有gdb natvis项目,鼠标悬浮显示变量也不行,应该是lsp-ui用不了
调用堆栈也不好用,显示的内容太多,堆栈切换也不方便,鼠标在Debug Sessions双击切换后树状结构会收起来,非难难用
下面是我的dap的设置
(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)
([f11] . dap-step-in)
("S-<f11>" . dap-step-out)
("S-<f5>" . dap-disconnect)
("<f10>" . dap-next)
("<f6>" . dap-continue)
("<f9>" . 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 "/usr/bin/lldb-vscode")))
)
目前来说还是可用的,就是很不方便
最近公司的硬件产品量产细节盯完了, 下班后有点时间, 我每天下班写一点点吧。
平常都是目测的, 调试器用的不多, 发布以后, 大家多指点一下我, 我也想顺便在开发调试器插件的过程中学习一些高级调试技巧。
5 个赞
我debug用的是realgud,感觉对于一般的开发需求来说已经够用了。 dap-mode 那个太复杂了。
功能和配置相对来说都比较复杂,而且操作起来依赖鼠标。我不喜欢在emacs里面用鼠标。
好,看来还是dap设计和思考问题,太注重抄袭vscode体验了
目前 Emacs 中 debug 就那么几个包
-
gud
(代码比较老,很多新的debug工具不支持,比如ipdb,但是 Emacs 自带)
-
realgud
(重写版本的 gud
支持很多新的debug工具)
-
dap-mode
(和 lsp-mode 绑定太深, 但是复现了在 vscode 上debug的体验)
我觉得一般使用 realgud的体验就已经很不错了, dap-mode 唯一好的就是会有一个窗口把变量都展示出来了,而不用像realgud里面一个一个的输入变量名展示。
1 个赞
试了一圈调试器,发现只有realgud可以用.gdbinit加载qt5printer用来显示qt对象的值,感觉调试变量的话这个是刚需,虽然realgud交互不是很方便,没法像dap-mode那样f5直接进入调试状态,默认也是进入gdb终端,文件还要自己点过去,打断点取消问题也很多