如何让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_derivecrate(自定义类型):如果是你自己定义的结构体,用debug_derive替代标准库的#[derive(Debug)],它会生成不截断的Debug实现。先在Cargo.toml添加依赖:[dependencies] debug_derive = "0.1"然后在结构体上使用:
use debug_derive::Debug; #[derive(Debug)] struct OpSend { source: SendError, // 其他字段 }借助
pretty_assertionscrate:这个库的Debug格式化会自动展开完整内容,添加依赖后:[dependencies] pretty_assertions = "1.4"使用它的
debug!宏打印:use pretty_assertions::debug; debug!("完整错误信息: {}", your_bind_error);
内容的提问来源于stack exchange,提问作者Thermatix
相关产品推荐
相关产品推荐

