5 个版本 (3 个破坏性版本)
0.4.1-alpha1 | 2023 年 9 月 19 日 |
---|---|
0.3.1-alpha1 | 2023 年 7 月 13 日 |
0.3.0-alpha1 | 2023 年 7 月 13 日 |
0.2.0-alpha1 | 2022 年 11 月 25 日 |
0.1.0-alpha1 | 2022 年 11 月 13 日 |
#115 在 调试
10,148 每月下载量
在 2 crates 中使用
195KB
2K SLoC
dap-rs,调试适配器协议的 Rust 实现
简介
这个包是 调试适配器协议 (简称 DAP) 的 Rust 实现。
最好将 DAP 与 LSP (语言服务器协议) 进行比较,但它是为调试器设计的。核心思想是相同的:一个协议作为编辑器和调试器之间交流的通用语言。这意味着实现了 DAP 的编辑器可以使用也实现了 DAP 的调试器。
在实践中,适配器可能与实际的调试器分开。例如,可以实现在 gdb 子进程的标准输入上写入命令的适配器,然后解析它接收的输出(这就是为什么它被称为“适配器”——它使调试器适应了解 DAP 的编辑器)。
稳定性
这个包处于相当早期阶段,破坏性会频繁发生。任何低于 1.0 的版本可能都是破坏性版本。
最小示例
要开始,创建一个二进制项目,并在你的 Cargo.toml 中添加 dap
[package]
name = "dummy-server"
version = "*"
edition = "2021"
[dependencies]
dap = "*"
我们的示例服务器将从文本文件读取输入,并将输出写入标准输出。
use std::fs::File;
use std::io::{BufReader, BufWriter};
use thiserror::Error;
use dap::prelude::*;
#[derive(Error, Debug)]
enum MyAdapterError {
#[error("Unhandled command")]
UnhandledCommandError,
#[error("Missing command")]
MissingCommandError,
}
type DynResult<T> = std::result::Result<T, Box<dyn std::error::Error>>;
fn main() -> DynResult<()> {
let output = BufWriter::new(std::io::stdout());
let f = File::open("testinput.txt")?;
let input = BufReader::new(f);
let mut server = Server::new(input, output);
let req = match server.poll_request()? {
Some(req) => req,
None => return Err(Box::new(MyAdapterError::MissingCommandError)),
};
if let Command::Initialize(_) = req.command {
let rsp = req.success(
ResponseBody::Initialize(Some(types::Capabilities {
..Default::default()
})),
);
// When you call respond, send_event etc. the message will be wrapped
// in a base message with a appropriate seq number, so you don't have to keep track of that yourself
server.respond(rsp)?;
server.send_event(Event::Initialized)?;
} else {
return Err(Box::new(MyAdapterError::UnhandledCommandError));
}
Ok(())
}
许可证
这个库以 MIT 和 Apache 2.0 双许可。这意味着用户可以选择这两者之一。通常,这些是非限制性、非病毒许可证,也称为“你想做什么都可以,但我不能保证”。
商业支持可在合同基础上获得(联系我:[email protected])。
依赖关系
~0.8–2MB
~41K SLoC