當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Debug用法及代碼示例


本文簡要介紹rust語言中 Trait std::fmt::Debug 的用法。

用法

pub trait Debug {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>;
}

? 格式化。

Debug 應該在麵向程序員的調試上下文中格式化輸出。

一般來說,你應該隻是derive一個Debug實現。

當與備用格式說明符 #? 一起使用時,輸出為 pretty-printed。

有關格式化程序的更多信息,請參閱the module-level documentation

如果所有字段都實現 Debug ,則此特征可以與 #[derive] 一起使用。當 derive d 用於結構時,它將使用 struct 的名稱,然後是 { ,然後是每個字段名稱和 Debug 值的逗號分隔列表,然後是 } 。對於 enum ,它將使用變體的名稱,如果適用的話,使用 ( ,然後使用字段的 Debug 值,然後使用 )

穩定

派生的 Debug 格式不穩定,因此可能會隨著未來的 Rust 版本而改變。此外,標準庫(libstdlibcoreliballoc 等)提供的類型的 Debug 實現不穩定,並且可能會隨著未來的 Rust 版本而改變。

例子

派生實現:

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

let origin = Point { x: 0, y: 0 };

assert_eq!(format!("The origin is: {:?}", origin), "The origin is: Point { x: 0, y: 0 }");

手動實現:

use std::fmt;

struct Point {
    x: i32,
    y: i32,
}

impl fmt::Debug for Point {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("Point")
         .field("x", &self.x)
         .field("y", &self.y)
         .finish()
    }
}

let origin = Point { x: 0, y: 0 };

assert_eq!(format!("The origin is: {:?}", origin), "The origin is: Point { x: 0, y: 0 }");

Formatter 結構上有許多幫助方法可以幫助您手動實現,例如 debug_struct

使用 derive Formatter 上的調試生成器 API 實現的 Debug 支持使用備用標誌 pretty-printing: {:#?}

Pretty-printing 與 #?

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

let origin = Point { x: 0, y: 0 };

assert_eq!(format!("The origin is: {:#?}", origin),
"The origin is: Point {
    x: 0,
    y: 0,
}");

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::fmt::Debug。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。