voyager -- A blazingly fast DAP client for Emacs

最近在开发一个独立的 DAP Client – voyager, 这个项目的目标是:

  1. 永远不卡Emacs: 类似 lsp-bridge 那样的RPC+多线程设计, 永远不卡顿Emacs
  2. 超快速度: 也是因为多线程设计
  3. 键盘导向: 面向Emacser的键盘操作来设计, 不跟风 VSCode 的鼠标操作
  4. 开箱即用: 希望Emacs调试体验开箱即用
  5. 独立运行: 独立于 lsp-bridge, 不和 lsp-bridge 绑定

因为DAP和LSP的协议格式和规范都是类似的, 通讯部分代码可以复用 lsp-bridge 代码, 最近下班在以蜗牛的速度开发, 第一个目标是可以利用 debugpy 来调试 Python 程序, 等Python语言把流程跑通以后, 再陆续支持其他语言。

因为公司的事情比较忙, 开发速度是真的蜗牛, 每天能写一个函数就不错了。

目前 voyager 还没法工作, 现在卡在发了 initialize 请求给调试器适配器后, 调试器适配器还没有任何回应。

之所以这么早发出来, 是想让大家知道我已经在启动开发工作了, 也希望 lsp-bridge/EAF 的开发者能够加入开发过程中, 指导我一下。 :wink:

33 个赞

大佬真是勤奋啊

主要想写出来调试我一些EAF的深层bug,顺便通过写调试器来学习高级调试技巧。

1 个赞

哥,你终于出手了。我暂时不敢要求能调c++,c#这些了。只要能正常调试个python,那么emacs对我的实用程度就能指数级别增加。现在唯一的天坑就是调试体验了。哥,先给你赞一个!

4 个赞

:+1: zsbd

大佬好会给包取名字!

1 个赞

哈哈是这样子的,猫大天天自谦是英语渣渣,但是最后起的名字真的都很不错,都让人眼前一亮很有艺术感。这比码农们爱玩的那套递归缩写,充满了行业黑话气质的一坨乱码缩写,有意思多了哈哈哈。

5 个赞

init消息已经通过了,剩下就是解析协议,开发ui效果。

3 个赞

initialize、attach、setFunctionBreakpoints、configurationDone协议都已经实现, 分别对应DAP Server的初始化, 启动、设置函数断点、配置完成的意思。

按照我读DAP协议标准的内容, 后面就可以执行 continue、 next、 step-in、 step-out 等操作, 然后在暂停的地方voyager请求变量和内存的具体值, 再发送调试器适配器返回结果给Emacs进行界面绘制即可。

后面的进度未知, 因为我很少用调试器, 所以我可能要查一些调试器的高级用法, 理解高级用法后再继续开发 DAP Client.

12 个赞

猫大,我的键盘没有 F1~F12

请问这种情况下能用 voyager 吗

猫大是提供的函数,想绑定什么快捷键就绑定什么呀

肯定是可以用的, 最近太忙了, 开发进度有点慢(主要是我没有用调试器的习惯), 等我开发完毕可以用了, 我通知大家。

用过 dap-mode 的大伙们, 能否说一下你们怎么用 dap-mode 步骤? 比如第一步怎么做, 第二步怎么做, 每一步你们关心什么细节和信息?

我需要知道大家怎么用 dap-mode 的, 然后推进 voyager 的开发。

2 个赞

我平时调试 c 代码,虽然配置好了 dap-mode ,但是没有用过,不用的原因:

  1. dap-mode 模仿 vscode 的 UI ,但是 emacs 本身没有那么丰富的 UI 元素,导致模仿出来的 UI 交互很难用
  2. 调试 c 代码,程序很容易崩溃, 崩溃后 dap-mode 残留一堆窗口,buffer,没有做好清理工作

我用调试器的步骤:

  1. 打断点
  2. 运行程序
  3. 在调试过程中单步,查看变量,查看堆栈,执行 gdb 命令

我觉得一些基本的功能:

  1. 断点管理
  2. 调用堆栈查看
  3. 单步
  4. 执行调试器命令
2 个赞

好的,感谢指导,信息很有用。

1 个赞

如果是脚本调试,比如python, 能像VSCode那样打开任意一个.py, 然后单步启动就能调会比较爽。如果调试参数传递,条件断点,信息输出窗口的文本过滤这些能有那就更棒了。

用了lsp-bridge,非常期待 voyager。

会做成一键启动吗 :heart_eyes:,类似于 lsp-bridge这样,开箱即用。

期待!!!!

使用调试步骤差不多也是这3步