如何在rust-gdb中打印调用Rust函数后的结果?

3
我想在rust-gdb控制台中打印一个函数的结果。
fn.rs
fn one() -> i32 {
    1
}

fn main() {
    println!("{}", one());
}

控制台

rustc -g ./fn.rs
rust-gdb ./fn
>>> b 6
>>> run
>>> print one()
Invalid data type for function to be called.

有什么方法可以显示函数的结果吗?
我正在使用Rust 1.27.0和GDB 7.11。我直接编译fn.rs,没有模块。我尝试了这些额外的命令:
(gdb) p one 
$1 = 1 
(gdb) p one() 
Invalid data type for function to be called. 
(gdb) p 
::module::one() A syntax error in expression, near ::one()'. 
(gdb) p 
::module::one A syntax error in expression, near ::one'. 
(gdb) p 
fn::one() No symbol "one" in namespace "fn".

p one() 是禁用的吗?


1
你现在在一个名为 fn 的模块中:你尝试过使用完整路径(例如 fn::one())打印定义吗?如果不确定路径,请显示函数列表。 - Boiethios
5
可能需要更多关于您正在运行的平台以及 rustcrust-gdb 版本的信息。当我运行您发布的内容时,gdb 确实按预期显示 $1 = 1 - mcarton
将其包装在模块中也可以起作用:print ::module::one(),结果为 $1 = 1 - Tim Diekmann
2
@Boiethios 这里没有模块。OP正在直接编译文件 fn.rs - Shepmaster
谢谢大家,我使用的是rustc==1.27.0和gdb==7.11。 我只使用fn.rs。没有模块。 我尝试了额外的命令。(gdb) p one $1 = 1 (gdb) p one() 要调用的函数的数据类型无效。 (gdb) p ::module::one() 表达式中有语法错误,附近为 `::one()'。 (gdb) p ::module::one 表达式中有语法错误,附近为 `::one'。 (gdb) p fn::one() 命名空间“fn”中没有符号“one”。@mcarton 谢谢,你使用哪个版本? - fukatani
显示剩余3条评论
1个回答

1

我尝试了gdb==8.11。 它完美地工作。

(gdb) p one
$1 = {fn () -> i32} 0x55555555a5a0 <fn::one>
(gdb) p one()
$2 = 1

感谢大家,尤其是 @mcarton。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接