Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menangkap Jejak Tindanan daripada Panik dalam Go?

Bagaimanakah Saya Boleh Menangkap Jejak Tindanan daripada Panik dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-12 12:27:02896semak imbas

How Can I Capture Stack Traces from Panics in Go?

Mengambil Surih Tindanan daripada Panik

Panik dalam Go menjana surih tindanan berharga yang dipaparkan pada stdout. Walau bagaimanapun, apabila pulih daripada panik, hanya mesej ralat dikembalikan, mengehadkan keupayaan penyahpepijatan.

Artikel ini meneroka kemungkinan menyimpan surih tindanan panik untuk penyahpepijatan dipertingkatkan.

Penyelesaian : Menggunakan Pakej Runtime/Debug

Seperti yang dicadangkan oleh Volker dan disebut dalam ulasan, pakej runtime/debug Go menyediakan fungsi untuk menangkap surih tindanan. Berikut ialah contoh kod yang menunjukkan penggunaannya:

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

Apabila anda menjalankan kod ini, ia mencetak surih tindanan daripada panik:

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

Output ini menyediakan baris dalam kod sumber (main.go:14) yang menyebabkan panik, menjadikannya lebih mudah untuk mengenal pasti puncanya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Jejak 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