0 Tage Serie
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.