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
Lepaskan: 2024-11-12 12:27:02
asal
896 orang telah melayarinya

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!")
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan