在使用 rust-gdb 调试时,如何进入一个在 return 值中调用的函数?

How do I step into a function called in a return value when debugging with rust-gdb?

在下面的代码中:

match fnA(size) {
    Some(arr) => SomeBlock::new(size, &arr, false).as_ptr().add(1) as *mut c_void,
    None => ptr::null::<c_void>() as *mut c_void,
}

我想用rust-gdb进入SomeBlock::new(size, &arr, false)。当我 运行 它正常时,我能够进入 fnA,但是如果我在 Some(arr) 在线时尝试进入,gdb 就结束了运行完成程序的其余部分并退出。

我知道我可以直接在 SomeBlock::new 处插入一个断点,但我很好奇是否有更简洁的方法。

根据 GDB documentation on Rust:

The Rust expression evaluator does not support “statement-like” expressions such as if or match, or lambda expressions.

您似乎无法进入 match 表达式中的任何内容。请注意,您可以进入 fnA,因为它是在其输出在匹配块内匹配之前进行评估的。