gpt4 book ai didi

macos - DTrace `pid` 提供程序不触发某些 `return` 探测

转载 作者:行者123 更新时间:2023-11-29 08:06:03 26 4
gpt4 key购买 nike

我使用的是 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)
}

问题是,当 entry 探测器正常工作时,无法触发两个 return 探测器。此外,如果我以相同的方式为 Compile::compile 函数设置 entryreturn 探测器,两个探测器都可以工作。

那么这个问题的原因可能是什么,我应该如何解决它?

最佳答案

根据 Brendan Gregg's blog post ,问题可能是由编译器优化引起的,其中 DTrace 被优化的代码混淆,因此它无法创建某些 return 探测器。要关闭优化,我们可以在测试程序的Cargo.toml中添加如下内容:

[profile.release]
opt-level = 0

完成此操作后,我可以使用以下命令找到所需的 return 探测器:

sudo dtrace -l -n 'pid$target:::return' -c './path/to/test/binary'

关于macos - DTrace `pid` 提供程序不触发某些 `return` 探测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49601772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com