#error #diagnostics #loaded #function #debugging #info #associated

declaration_site

遍历与当前加载函数关联的调试信息

2 个不稳定版本

0.2.0 2022年5月8日
0.1.0 2022年5月6日

#288 in 可视化

MIT/Apache

38KB
691

Declaration Site

License Crates.io Bevy Discord

实现了遍历与当前加载对象关联的调试信息,以查找函数。此crate的主入口点是for_some_currently_loaded_rust_functions,它内部遍历所有可以找到的函数。

此crate是为了供 bevy 使用,用于报告系统错误。其他使用依赖注入类似功能的crate可能会发现这很有用。这可以用来获取函数项类型的源代码位置。这通过declaration_by_name和相关函数实现。然而,如果搜索多个名称,使用for_some_currently_loaded_rust_functions将更加高效。

# use declaration_site::{for_some_currently_loaded_rust_functions, DeclarationSite};
# use std::collections::HashMap;
let mut expected_names = HashMap::<String, Option<DeclarationSite>>::from([
    // Note that source locations for std/core are less likely to work, this is just an example
    ("std::io::read".into(), None),
    ("std::io::write".into(), None),
]);
for_some_currently_loaded_rust_functions(|name, function| {
    if let Some(result) = expected_names.get_mut(&name) {
        // Note that the `TryFrom` impl is only for `&Function`, so need to add
        // the reference
        *result = DeclarationSite::try_from(&function).ok();
    };
    // We could bail early here if all names have been filled, but that would
    // complicate the example. See the item level documentation for details
});
// Do things with `expected_names`...

注意事项

这是一个尽力而为的搜索。由于任何数量的原因,它可能无法找到给定的名称

  • 在WASM上找不到任何内容。
  • 如果函数未链接(这可能在它从未被调用时发生),则可能找不到。
  • 函数已被内联
  • 如果在MacOS上运行(我们目前由于未知原因静默失败,作者由于无法运行它而无法调试此问题。欢迎贡献!)

更新日志

请参阅 CHANGELOG.md

许可协议

此工作的某些部分(在src/symbolic_object中)是根据仅受MIT许可证许可的作品改编的,可在src/symbolic_object/LICENSE中找到。修改也根据以下条款进行许可。请注意,这与已存在的symbolic-debuginfo依赖项的许可证相同。

根据以下任何一个许可证进行许可

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~10–17MB
~243K SLoC