Maison > développement back-end > Golang > le corps du texte

Comment puis-je capturer et stocker les traces de pile des paniques dans Go ?

Barbara Streisand
Libérer: 2024-11-14 17:27:02
original
630 Les gens l'ont consulté

How can I capture and store stacktraces from panics in Go?

Récupération et stockage des traces de pile des paniques

Alors que les paniques génèrent des traces de pile informatives sur la sortie standard, les informations peuvent être perdues lors de la récupération après la panique en utilisant récupérer(). Cependant, il est possible de capturer et de stocker le stacktrace pour un débogage amélioré.

Le package runtime/debug offre une solution pour récupérer les stacktraces. Voici comment il peut être utilisé :

package main

import (
    "fmt"
    "runtime/debug"
)

func main() {
    // Function to recover from panics and capture stacktraces
    defer func() {
        if r := recover(); r != nil {
            // Convert the stacktrace bytes into a string
            fmt.Println("Stacktrace from panic: \n" + string(debug.Stack()))
        }
    }()

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

    fmt.Printf("Hello, playground %d", j)
}
Copier après la connexion

Cette solution imprime la trace de pile suivante :

Stacktrace from panic:
goroutine 1 [running]:
runtime/debug.Stack(0x1042ff18, 0x98b2, 0xf0ba0, 0x17d048)
    /usr/local/go/src/runtime/debug/stack.go:24 +0xc0
main.main.func1()
    /tmp/sandbox973508195/main.go:11 +0x60
panic(0xf0ba0, 0x17d048)
    /usr/local/go/src/runtime/panic.go:502 +0x2c0
main.main()
    /tmp/sandbox973508195/main.go:16 +0x60
Copier après la connexion

En tirant parti du package runtime/debug, vous pouvez capturer et stocker efficacement les traces de pile, permettant ainsi plus débogage complet lorsque des paniques surviennent dans vos applications Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal