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