如何在调试输出中打印完整的结构路径?

Posted

技术标签:

【中文标题】如何在调试输出中打印完整的结构路径?【英文标题】:How to print full struct path in Debug output? 【发布时间】:2021-11-05 11:36:39 【问题描述】:

我有mymod.rs:

pub mod mymod 
    #[derive(Debug)]
    pub struct mystruct                           
        pub x: i32,
    

还有main.rs:

mod mymod;
use mymod::mymod::mystruct;
fn main() 
    let x = mystruct  x: 10 ;
    println!(":#?", x);

输出是:

mystruct 
    x: 10,                                                    

我可以让它显示以下文字吗:

mymod::mymod::mystruct 
    x: 10,                                                    

?

【问题讨论】:

不是你想要的,但要注意dbg!存在 【参考方案1】:

为了对结构的格式进行任何更改,您必须手动实现Debug 而不是使用#[derive(Debug)]。这是一个产生你想要的输出的实现:

pub mod mymod 
    use std::fmt;

    pub struct mystruct                           
        pub x: i32,
    
    
    impl fmt::Debug for mystruct 
        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result 
            f.debug_struct(std::any::type_name::<Self>())
                .field("x", &self.x)
                .finish()
        
    

Playground

可能还有一个库为Debug 提供了一个备用派生宏,可以配置为以这种方式打印类型名称,但我碰巧不知道。

顺便说一句,我注意到你有mymod::mymod。这不是构造 Rust 代码的常用方法。当您编写mod mymod; 时,它本身 会创建一个模块。模块文件中通常不应包含mod mymod ... ;这将创建 两个 级别的具有相同名称的模块。将 mod mymod; 用于单独的文件或将 mod mymod ... 用于内联在同一文件中的模块 - 不要同时使用两者,因为它是多余的。

【讨论】:

以上是关于如何在调试输出中打印完整的结构路径?的主要内容,如果未能解决你的问题,请参考以下文章

给定相对路径时,如何让 MSBUILD 评估和打印完整路径?

Inno Setup:如何查看变量值或写入调试输出?

如何在java中关闭当前工作目录(不是完整路径)[关闭]

如何查找 2 个顶点之间的所有可能路径

如何在 Jupyter 中显示完整输出,而不仅仅是最后一个结果?

dump方法打印表格