Heim >Backend-Entwicklung >Golang >Wie speichere ich Panic Stacktraces in Go?

Wie speichere ich Panic Stacktraces in Go?

DDD
DDDOriginal
2024-11-19 16:14:02548Durchsuche

How to Store Panic Stacktraces in Go?

Panic Stacktraces abrufen und speichern

Panics in Go erzeugen wertvolle Stacktraces, die Debugging-Einblicke liefern. Bei der Wiederherstellung nach einer Panik wird jedoch nur eine Fehlermeldung zurückgegeben, die keine detaillierten Informationen auf Zeilenebene enthält.

Um diese Einschränkung zu beheben, bietet das Laufzeit-/Debugpaket eine Lösung. So können Sie den Stacktrace aus einer Panik als Variable speichern:

package main

import (
    "fmt"
    "runtime/debug"
)

func main() {
    defer func() {
        if r := recover(); r != nil {
            stacktrace := string(debug.Stack())
            fmt.Println("Stacktrace from panic:", stacktrace)
        }
    }()

    var mySlice []int
    j := mySlice[0] // panic

    fmt.Printf("Hello, playground %d", j) // unreachable code
}

Ausgabe:

Stacktrace from panic:
goroutine 1 [running]:
runtime/debug.Stack(0x1042ff18, 0x98b2, 0x17d048, 0x17d1c0)
    /usr/local/go/src/runtime/debug/stack.go:24 +0xc0
main.main.func1()
    /tmp/sandbox973508195/main.go:11 +0x60
panic(0x17d048, 0x17d1c0)
    /usr/local/go/src/runtime/panic.go:665 +0x260
main.main()
    /tmp/sandbox973508195/main.go:16 +0x60

Dieser Code zeigt, wie der Stacktrace im Falle einer Panik erfasst wird Zeile für Zeile Details, die ein effektives Debuggen erleichtern.

Das obige ist der detaillierte Inhalt vonWie speichere ich Panic Stacktraces in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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