Heim > Backend-Entwicklung > Golang > Wie kann ich Stack-Traces von Panics in Go erfassen?

Wie kann ich Stack-Traces von Panics in Go erfassen?

Susan Sarandon
Freigeben: 2024-11-12 12:27:02
Original
894 Leute haben es durchsucht

How Can I Capture Stack Traces from Panics in Go?

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!")
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage