#source #ast #source-file #spans #fire-dbg #syntax-tree

bin+lib firedbg-rust-parser

FireDBG Rust 源代码解析器

1 个稳定版本

1.0.0 2023年12月8日

#764调试


3 个代码包中 使用 (直接使用 2 个)

MIT/Apache

100KB
2.5K SLoC

FireDBG Rust 源代码解析器

基于 syn.

firedbg-rust-parser 是一个 Rust 源代码解析器。它可以解析 Rust 源文件,遍历 Rust 的抽象语法树,然后生成一个断点列表,供调试器在每次函数调用开始时暂停程序。

遍历 AST

我们将遍历 Rust AST,syn::Item,并收集所有形式的功能/方法

  1. 自由独立的函数,syn::Item::Fn
  2. 实现函数,syn::Item::Impl
  3. 特质默认函数,syn::Item::Trait
  4. 实现特质函数,syn::Item::Impl
  5. 嵌套函数,递归遍历 syn::Item
  6. 内联模块中定义的函数,syn::Item::Mod

可中断的 Span

Span是一个源代码区域,由一个包含行号和列号的范围元组以及宏展开信息表示。它允许调试器在正确位置设置断点。调试器将在可中断范围的开始或结束处设置断点。

fn func() -> i32 {
/*                ^-- Start of Breakable Span: (Line 1, Column 19)  */
    let mut i = 0;
/*  ^-- End of Breakable Span: (Line 3, Column 5)  */
    for _ in (1..10) {
        i += 1;
    }
    i
}

想法

当前实现很简单,但我们得到了我们需要的。我们考虑嵌入Rust Analyzer,因为有几个优点:1) 获取完全限定的类型名称 2) 遍历静态调用图。问题是资源使用:我们最终会通过cargo、语言服务器和firedbg三次运行编译器前端。

依赖项

~11-21MB
~321K SLoC