Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menangkap Jejak Tindanan daripada Panik dalam 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!