Maison > développement back-end > Golang > Comment puis-je capturer et stocker la trace de pile d'une panique dans Go ?

Comment puis-je capturer et stocker la trace de pile d'une panique dans Go ?

DDD
Libérer: 2024-11-15 17:07:02
original
632 Les gens l'ont consulté

How Can I Capture and Store the Stack Trace of a Panic in Go?

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

Lorsqu'une panique se produit dans un programme Go, une trace de pile fournissant des informations de débogage précieuses est automatiquement imprimée sur sortie standard. Cependant, lors de la récupération après une panique, recovery() renvoie uniquement une chaîne d'erreur indiquant la cause de la panique.

Cela soulève la question de savoir s'il est possible de stocker la trace de pile imprimée pour une analyse plus approfondie.

Solution : Utilisation du package Runtime/Debug

Pour résoudre ce problème, nous pouvons exploiter le package runtime/debug. En encapsulant notre code dans une fonction différée qui invoque recovery(), nous pouvons capturer la panique et accéder à la trace de la pile à l'aide de debug.Stack().

Vous trouverez ci-dessous un exemple d'extrait de code illustrant cette approche :

package main

import (
    "fmt"
    "runtime/debug"
)

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

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

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

Lors de son exécution, ce code affichera la trace de pile suivante en cas de panique :

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

Cette trace de pile fournit une vue détaillée de la chaîne d'appels de fonction menant à la panique, ce qui la rend plus facile pour identifier la source de l'erreur.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal