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

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

Susan Sarandon
Libérer: 2024-11-12 12:27:02
original
839 Les gens l'ont consulté

How Can I Capture Stack Traces from Panics in Go?

Récupération des traces de pile à partir de Panics

Panics in Go génère de précieuses traces de pile affichées sur la sortie standard. Cependant, lors de la récupération après une panique, seul un message d'erreur est renvoyé, limitant les capacités de débogage.

Cet article explore la possibilité de stocker la trace de la pile de panique pour un débogage amélioré.

Solution : Utilisation du package Runtime/Debug

Comme suggéré par Volker et mentionné dans les commentaires, le package runtime/debug de Go fournit la fonctionnalité permettant de capturer les traces de pile. Voici un exemple de code démontrant son utilisation :

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!")
}
Copier après la connexion

Lorsque vous exécutez ce code, il imprime la trace de la pile de la panique :

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
Copier après la connexion

Cette sortie fournit la ligne dans le code source (main.go:14) qui a provoqué la panique, ce qui facilite l'identification de la cause.

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