gpt4 book ai didi

rust - 如何在 Rust 中获取当前堆栈帧深度?

转载 作者:行者123 更新时间:2023-12-05 08:25:03 24 4
gpt4 key购买 nike

如何确定当前栈帧深度?

fn print_depths() {
println!("stack frame depth {}", stack_frame_depth());
fn print_depth2() {
println!("stack frame depth {}", stack_frame_depth());
}
print_depth2();
}

pub fn main() {
print_depths();
}

会打印

stack frame depth 1
stack frame depth 2

我知道 main 有来电者,所以特定号码可能不同。


我试过了stacker::remaining_stack .但是,这会打印堆栈中剩余的字节数。由于传递给函数的参数会影响堆栈字节“高度”,因此不可能派生出简单的函数调用“高度”。我想要一个当前函数调用高度的计数。

最佳答案

如果注意到 Peter Hall's answer 中的所有注意事项,仍然希望获得实际堆栈深度,考虑backtrace::Backtrace :

#[inline]
fn stack_frame_depth() -> usize {
Backtrace::new_unresolved().frames().len()
}

See it on the playground .

如果你想避免在实例化一个Backtrace时涉及分配,考虑backtrace::trace相反:

#[inline]
fn stack_frame_depth() -> usize {
let mut depth = 0;
backtrace::trace(|_| {
depth += 1;
true
});
depth
}

然而,上述两种方法都需要 std 来保证线程安全。如果您的 crate 是 no_std 和/或您以其他方式确保同步,则有 backtrace::trace_unsynchronized .

关于rust - 如何在 Rust 中获取当前堆栈帧深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69141478/

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