【发布时间】:2018-04-01 19:18:59
【问题描述】:
我使用的是 OS X Yosemite 10.10.5。我有一个用 Rust 编写的库,我需要测量在库中花费的运行时间。我设置了一些像这样的pid 探针(不是实际的脚本):
pid$target::*parse*:entry
{
}
pid$target::*parse*:return
{
}
pid$target::*re_match*:entry
{
}
pid$target::*re_match*:return
{
}
对应的测试代码如下:
let xxx = xxx_of_len(10);
let m = re_match(RE_XXX, &xxx).unwrap();
println!("{:?}", m);
我的库中re_match函数的实现是:
pub fn re_match(re: &str, s: &str) -> Result<MatchResult, Error> {
let prog = Compiler::compile(&Parser::parse(re)?)?;
let mut vm = Vm::new(&prog);
if vm.run(&s.chars().collect()) {
return Ok(MatchResult::Match(vm.groups.clone()));
}
Ok(MatchResult::NotMatch)
}
问题是,两个return 探针无法触发,而entry 探针正常工作。另外,如果我以同样的方式为Compile::compile 函数设置entry 和return 探针,那么这两个探针都可以工作。
那么这个问题的原因可能是什么,我应该如何解决它?
【问题讨论】:
标签: macos debugging rust profiling dtrace