Maison >développement back-end >Golang >Comment puis-je capturer et stocker les traces de pile des paniques dans Go ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-14 17:27:02717parcourir

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)
}

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

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!

Déclaration:
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