Maison > développement back-end > Golang > Comment puis-je récupérer et stocker la trace de pile d'une panique Go pour un débogage plus détaillé ?

Comment puis-je récupérer et stocker la trace de pile d'une panique Go pour un débogage plus détaillé ?

Susan Sarandon
Libérer: 2024-11-13 02:23:02
original
918 Les gens l'ont consulté

How can I retrieve and store the stacktrace of a Go panic for more detailed debugging?

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

Panics in Go, par défaut, génère une trace de pile sur la sortie standard, fournissant des informations de débogage précieuses. Cependant, la récupération après une panique à l'aide de recovery() renvoie uniquement une description de l'erreur.

Existe-t-il un moyen de récupérer et de stocker la trace de pile produite lors d'une panique, facilitant ainsi l'identification de l'emplacement exact du problème ?

Utilisation du package runtime/debug

La réponse réside dans le package runtime/debug. Ce package fournit un mécanisme pour accéder et stocker la trace de pile associée à une panique. Voici comment :

package main

import (
    "fmt"
    "runtime/debug"
)

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

    // Trigger a panic
    var mySlice []int
    j := mySlice[0] // Index out of bounds panic

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

Ce code définit une fonction différée qui gère les éventuelles paniques. Lorsqu'une panique se produit, la fonction recovery() capture l'erreur. De plus, la fonction debug.Stack() est utilisée pour récupérer la trace de pile associée à la panique et la stocker en tant que variable de chaîne. Enfin, l'erreur et le stacktrace sont imprimés sur la console à des fins de débogage.

L'exécution de ce code affichera ce qui suit :

Panic detected: runtime error: index out of range
Stacktrace:
goroutine 1 [running]:
main.main.func1()
    /tmp/sandbox773777618/main.go:11 +0x60
panic(0xf9e00, 0x2078e0)
    /usr/local/go/src/runtime/panic.go:502 +0x2c0
main.main()
    /tmp/sandbox773777618/main.go:17 +0x60
Copier après la connexion

Dans cette sortie, le stacktrace montre clairement la ligne dans le code qui a provoqué la panique, fournissant des informations de débogage plus précieuses que la simple description 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
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