Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menangkap dan menyimpan surih tindanan daripada panik dalam Go?

Bagaimanakah saya boleh menangkap dan menyimpan surih tindanan daripada panik dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-14 17:27:02621semak imbas

How can I capture and store stacktraces from panics in Go?

Mendapatkan dan Menyimpan Jejak Tindanan daripada Panik

Sementara panik menjana surih tindanan bermaklumat kepada output standard, maklumat mungkin hilang apabila pulih daripada panik menggunakan pulih (). Walau bagaimanapun, adalah mungkin untuk menangkap dan menyimpan surih tindanan untuk penyahpepijatan dipertingkatkan.

Pakej masa jalan/nyahpepijat menawarkan penyelesaian untuk mendapatkan surih tindanan. Begini cara ia boleh digunakan:

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

Penyelesaian ini mencetak surih tindanan berikut:

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

Dengan memanfaatkan pakej masa jalan/nyahpepijat, anda boleh menangkap dan menyimpan surih tindanan dengan berkesan, membolehkan lebih banyak penyahpepijatan menyeluruh apabila panik berlaku dalam aplikasi Go anda.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menangkap dan menyimpan surih tindanan daripada panik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn