rust / expert
Snippet
Erfassung dynamischer Ausführungs-Backtraces in benutzerdefinierten Fehlern
Zeigt, wie man Callstacks am genauen Ort der Fehlererstellung mithilfe des Backtrace-Typs der Rust-Standardbibliothek erfasst und so Debugging-Funktionen ohne Frameworks von Drittanbietern bereitstellt.
snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use std::backtrace::Backtrace;use std::fmt;#[derive(Debug)]pub struct EngineError {pub message: String,pub backtrace: Backtrace,}impl EngineError {pub fn new(msg: impl Into<String>) -> Self {Self {message: msg.into(),backtrace: Backtrace::capture(),}}}impl fmt::Display for EngineError {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {write!(f, "Engine Error: {}\nBacktrace:\n{}", self.message, self.backtrace)}}impl std::error::Error for EngineError {}
Erklärung
1
pub backtrace: Backtrace,
Nimmt die standardmäßige Backtrace-Struktur auf, um Programm-Stack-Traces zu erfassen.
2
backtrace: Backtrace::capture(),
Erfasst dynamisch den aktuellen Ausführungskontext und die Call-Stack-Frame-Pointer.
3
impl fmt::Display for EngineError {
Implementiert die Formatierung, um die benutzerfreundliche Nachricht zusammen mit dem Stack-Trace auszugeben.
4
impl std::error::Error for EngineError {}
Implementiert das zentrale Error-Trait, um Kompatibilität mit der Standard-Fehlerfortpflanzung zu ermöglichen.