Stack-Traces aus Panics abrufen
Panics in Go erzeugen wertvolle Stack-Traces, die auf stdout angezeigt werden. Bei der Wiederherstellung nach einer Panik wird jedoch nur eine Fehlermeldung zurückgegeben, was die Debugging-Funktionen einschränkt.
In diesem Artikel wird die Möglichkeit untersucht, den Stack-Trace der Panik für ein verbessertes Debugging zu speichern.
Lösung : Nutzung des Runtime/Debug-Pakets
Wie von Volker vorgeschlagen und in den Kommentaren erwähnt, bietet das Runtime/Debug-Paket von Go die Funktionalität zum Erfassen von Stack-Traces. Hier ist ein Codebeispiel, das seine Verwendung demonstriert:
package main import ( "fmt" "runtime/debug" ) func main() { // Define a deferred function to recover from the panic and store the stack trace. defer func() { if r := recover(); r != nil { stacktrace := string(debug.Stack()) fmt.Println("Stack trace from panic:\n", stacktrace) } }() // Panic with an out-of-range index access. var mySlice []int var index = 0 _, _ = mySlice[index] fmt.Println("This line will never run after the panic!") }
Wenn Sie diesen Code ausführen, druckt er den Stack-Trace aus der Panik:
Stack trace from panic: goroutine 1 [running]: runtime/debug.Stack(0x1fd66a1e, 0x741000, 0x229080, 0xd92df0) /usr/lib/go/src/runtime/debug/stack.go:24 +0xc0 main.main.func1() /home/user/go/src/example.com/myapp/main.go:14 +0x60 panic(0x1feed5f8, 0xd92df0) /usr/lib/go/src/runtime/panic.go:562 +0x2c0 main.main() /home/user/go/src/example.com/myapp/main.go:20 +0x132
Diese Ausgabe stellt die Zeile im Quellcode bereit (main.go:14), der die Panik verursacht hat, was es einfacher macht, die Ursache zu identifizieren.
Das obige ist der detaillierte Inhalt vonWie kann ich Stack-Traces von Panics in Go erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!