dap bridge 的需求调研

大家都比较喜欢 lsp-bridge, 同时也有很多 lsp-bridge 的用户反馈能否做一个独立于 lsp-mode 的 dap-bridge 出来?

我今天稍微瞄了一下DAP协议, 还是挺复杂的, 估计坑的面积比 lsp-bridge 还要大, 因为DAP比LSP协议还要复杂的是, 微软自己加了一个调试器适配层, 而不是直接让编辑器和调试器沟通的。

所以, 希望用 dap-mode 的同学分享一下自己平常用的情况, 语言、截图、主要功能或者特别想要的功能都可以。

我先摸个底, 等我有时间, 我根据大家反馈的优先级, 把大家想要的功能先做了。

dap-bridge 的优点我估计有几个:

  1. 性能, 和 lsp-bridge 一样快, 永远不卡 Emacs
  2. 不依赖 lsp-bridge, 可以和其他模块组合用, 不像 dap-mode 那样死绑定 lsp-mode
  3. 开箱即用, 可以保证像 lsp-bridge 那样 require 就自动适配, 不需要折腾细节
17 个赞

感觉配置起来比较麻烦,一直没用过 dap-mode。

对我个人而言最重要的还是像lsp-bridge一样开箱即用,还直接支持single模式和project模式。前面在windows上用lsp-bridge,遇到问题解决不了想放弃,也试了lsp-mode和eglot,但最后还是回到lsp-bridge ,折腾了好几天把问题解决。没办法,开箱即用太香了。

2 个赞

不放个投票么,完全不用、有用但不刚需、非常想要 啥的。

最想要的还是 many-windows,可以可视化地查看变量的值

(默认要一行行敲命令的调试方法感觉效率还不如传统print大法 :stuck_out_tongue_closed_eyes:

1 个赞

在emacs中配置dap-mode,比较复杂。希望dap-bridge 能支持python和C++。

语言是dart,写flutter,根据途中标注需要的功能:

  1. 能直接点击创建和删除breakpoint,用快捷键也行
  2. 能展示已经创建的breakpoint,并可以捕捉crash
  3. 能显示断点时候各种变量的值,这个最重要
  4. 有下一步,进入方法,跳出方法,断开等功能
1 个赞

希望支持Typescript (通过vscode内置新js调试器),dap-mode的那个过时很久了。

我没用过 lsp-mode 也没有用过 dap-mode, 我试了下 realgud, 感觉还行诶(只是很浅地试过).

和vscode类似,一键启动调试,侧边有窗口观察变量,是否支持鼠标点击操作均可。

因为懒猫大佬来发帖调研,大概率是已经要开坑了 :laughing:

期待一波^_^

断点,单步,变量

非常需要!!!
我现在就是用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 那个太复杂了。

dap你觉得是功能复杂,还是配置复杂?

功能和配置相对来说都比较复杂,而且操作起来依赖鼠标。我不喜欢在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终端,文件还要自己点过去,打断点取消问题也很多