ホームページ >バックエンド開発 >Golang >Go でパニック スタックトレースを保存するにはどうすればよいですか?

Go でパニック スタックトレースを保存するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-19 16:14:02505ブラウズ

How to Store Panic Stacktraces in Go?

パニック スタックトレースの取得と保存

Go のパニックは、デバッグに関する洞察を提供する貴重なスタックトレースを生成します。ただし、パニックから回復すると、行レベルの詳細情報が欠如したエラー メッセージが返されるだけです。

この制限に対処するために、ランタイム/デバッグ パッケージは解決策を提供します。パニック時のスタックトレースを変数として保存する方法は次のとおりです。

package main

import (
    "fmt"
    "runtime/debug"
)

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

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

    fmt.Printf("Hello, playground %d", j) // unreachable code
}

出力:

Stacktrace from panic:
goroutine 1 [running]:
runtime/debug.Stack(0x1042ff18, 0x98b2, 0x17d048, 0x17d1c0)
    /usr/local/go/src/runtime/debug/stack.go:24 +0xc0
main.main.func1()
    /tmp/sandbox973508195/main.go:11 +0x60
panic(0x17d048, 0x17d1c0)
    /usr/local/go/src/runtime/panic.go:665 +0x260
main.main()
    /tmp/sandbox973508195/main.go:16 +0x60

このコードは、パニック発生時にスタックトレースをキャプチャする方法を示しています。効果的なデバッグを容易にする行ごとの詳細。

以上がGo でパニック スタックトレースを保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。