最近在开发一个独立的 DAP Client – voyager, 这个项目的目标是:
- 永远不卡Emacs: 类似 lsp-bridge 那样的RPC+多线程设计, 永远不卡顿Emacs
- 超快速度: 也是因为多线程设计
- 键盘导向: 面向Emacser的键盘操作来设计, 不跟风 VSCode 的鼠标操作
- 开箱即用: 希望Emacs调试体验开箱即用
- 独立运行: 独立于 lsp-bridge, 不和 lsp-bridge 绑定
因为DAP和LSP的协议格式和规范都是类似的, 通讯部分代码可以复用 lsp-bridge 代码, 最近下班在以蜗牛的速度开发, 第一个目标是可以利用 debugpy 来调试 Python 程序, 等Python语言把流程跑通以后, 再陆续支持其他语言。
因为公司的事情比较忙, 开发速度是真的蜗牛, 每天能写一个函数就不错了。
目前 voyager 还没法工作, 现在卡在发了 initialize 请求给调试器适配器后, 调试器适配器还没有任何回应。
之所以这么早发出来, 是想让大家知道我已经在启动开发工作了, 也希望 lsp-bridge/EAF 的开发者能够加入开发过程中, 指导我一下。
36 个赞
主要想写出来调试我一些EAF的深层bug,顺便通过写调试器来学习高级调试技巧。
1 个赞
xiaoC
4
哥,你终于出手了。我暂时不敢要求能调c++,c#这些了。只要能正常调试个python,那么emacs对我的实用程度就能指数级别增加。现在唯一的天坑就是调试体验了。哥,先给你赞一个!
4 个赞
哈哈是这样子的,猫大天天自谦是英语渣渣,但是最后起的名字真的都很不错,都让人眼前一亮很有艺术感。这比码农们爱玩的那套递归缩写,充满了行业黑话气质的一坨乱码缩写,有意思多了哈哈哈。
5 个赞
init消息已经通过了,剩下就是解析协议,开发ui效果。
3 个赞
initialize、attach、setFunctionBreakpoints、configurationDone协议都已经实现, 分别对应DAP Server的初始化, 启动、设置函数断点、配置完成的意思。
按照我读DAP协议标准的内容, 后面就可以执行 continue、 next、 step-in、 step-out 等操作, 然后在暂停的地方voyager请求变量和内存的具体值, 再发送调试器适配器返回结果给Emacs进行界面绘制即可。
后面的进度未知, 因为我很少用调试器, 所以我可能要查一些调试器的高级用法, 理解高级用法后再继续开发 DAP Client.
12 个赞
肯定是可以用的, 最近太忙了, 开发进度有点慢(主要是我没有用调试器的习惯), 等我开发完毕可以用了, 我通知大家。
用过 dap-mode 的大伙们, 能否说一下你们怎么用 dap-mode 步骤? 比如第一步怎么做, 第二步怎么做, 每一步你们关心什么细节和信息?
我需要知道大家怎么用 dap-mode 的, 然后推进 voyager 的开发。
2 个赞
我平时调试 c 代码,虽然配置好了 dap-mode ,但是没有用过,不用的原因:
- dap-mode 模仿 vscode 的 UI ,但是 emacs 本身没有那么丰富的 UI 元素,导致模仿出来的 UI 交互很难用
- 调试 c 代码,程序很容易崩溃, 崩溃后 dap-mode 残留一堆窗口,buffer,没有做好清理工作
我用调试器的步骤:
- 打断点
- 运行程序
- 在调试过程中单步,查看变量,查看堆栈,执行 gdb 命令
我觉得一些基本的功能:
- 断点管理
- 调用堆栈查看
- 单步
- 执行调试器命令
2 个赞
xiaoC
16
如果是脚本调试,比如python, 能像VSCode那样打开任意一个.py, 然后单步启动就能调会比较爽。如果调试参数传递,条件断点,信息输出窗口的文本过滤这些能有那就更棒了。
用了lsp-bridge,非常期待 voyager。
会做成一键启动吗 ,类似于 lsp-bridge这样,开箱即用。
期待!!!!
猫大,问一下,voyager现在开发状态是啥?可用了呗?