2 个不稳定版本
0.2.0 | 2022年5月8日 |
---|---|
0.1.0 | 2022年5月6日 |
#288 in 可视化
38KB
691 行
Declaration Site
实现了遍历与当前加载对象关联的调试信息,以查找函数。此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 License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- 麻省理工学院许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~10–17MB
~243K SLoC