You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Rust不截断Debug输出以查看完整SendError内容?

解决Rust Debug输出被截断的问题

以下几种方法可以帮你打印完整的Debug内容,避免被..截断:

  • 优先尝试格式化标志#:把原来的{:?}换成{:#?},这个标志会触发Debug实现展开完整结构,很多第三方库(包括ldap3)的类型都会响应这个格式,直接打印所有细节:

    println!("{:#?}", your_bind_error);
    
  • 手动实现Debug trait(针对外部类型):如果目标类型是第三方库提供的,无法修改其Derive属性,可以创建一个包装类型,手动实现Debug来完整打印内部内容:

    use std::fmt;
    
    struct FullDebug<T>(pub T);
    
    impl<T: fmt::Debug> fmt::Debug for FullDebug<T> {
        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
            // 强制完整打印内部类型的Debug内容
            fmt::Debug::fmt(&self.0, f)
        }
    }
    
    // 使用时将错误包起来
    println!("{:?}", FullDebug(your_bind_error));
    

    如果知道SendError内部的具体字段(比如inner),也可以直接打印该字段:println!("{:?}", your_bind_error.source.inner);

  • 使用debug_derive crate(自定义类型):如果是你自己定义的结构体,用debug_derive替代标准库的#[derive(Debug)],它会生成不截断的Debug实现。先在Cargo.toml添加依赖:

    [dependencies]
    debug_derive = "0.1"
    

    然后在结构体上使用:

    use debug_derive::Debug;
    
    #[derive(Debug)]
    struct OpSend {
        source: SendError,
        // 其他字段
    }
    
  • 借助pretty_assertions crate:这个库的Debug格式化会自动展开完整内容,添加依赖后:

    [dependencies]
    pretty_assertions = "1.4"
    

    使用它的debug!宏打印:

    use pretty_assertions::debug;
    
    debug!("完整错误信息: {}", your_bind_error);
    

内容的提问来源于stack exchange,提问作者Thermatix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:42:19