Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mendapatkan Jejak Tindanan untuk Semua Goroutine dalam Proses Running Go?
Cara Membuang Jejak Tindanan untuk Semua Goroutine dalam Proses Running Go
Apabila menyahpepijat atau menyelesaikan masalah proses Go, mendapatkan kesan tindanan untuk semua goroutinenya boleh menjadi penting. Walau bagaimanapun, berbuat demikian tanpa mengubah suai kod sumber atau menamatkan proses boleh mencabar. Panduan ini menyediakan penyelesaian kepada masalah ini.
Masa jalan Go termasuk ciri yang membolehkan anda membuang surih tindanan atas permintaan. Walau bagaimanapun, menggunakan ciri ini dari luar proses tidak kelihatan serta-merta.
Menggunakan Pengendali Isyarat
Untuk menangkap surih tindanan bagi semua goroutin, anda boleh menyediakan isyarat pengendali yang mendengar isyarat tertentu. Apabila isyarat diterima, pengendali akan menjana dan mencetak surih tindanan.
Berikut ialah contoh coretan kod:
<code class="go">import ( "fmt" "os" "os/signal" "runtime" "syscall" ) func main() { // Create a channel to receive signals. sigChan := make(chan os.Signal) // Start a goroutine that will write stack traces to the channel. go func() { // Create a buffer to hold the stack trace. stacktrace := make([]byte, 8192) // Loop until a signal is received. for _ = range sigChan { length := runtime.Stack(stacktrace, true) fmt.Println(string(stacktrace[:length])) } }() // Register to receive SIGQUIT signals. signal.Notify(sigChan, syscall.SIGQUIT) // Continue with the main application logic. ... }</code>
Menghantar Isyarat
Setelah pengendali disediakan, anda boleh menghantar isyarat SIGQUIT kepada proses untuk mencetuskan pembuangan kesan tindanan. Anda boleh melakukan ini menggunakan arahan berikut:
kill -QUIT <process id>
Di mana
Contoh Penggunaan
Berikut ialah contoh senario:
Apabila proses berjalan, buka tetingkap terminal dan masukkan arahan bunuh:
kill -QUIT <process id>
Surih tindanan untuk semua goroutine dalam proses Go akan dicetak dalam tetingkap terminal.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Jejak Tindanan untuk Semua Goroutine dalam Proses Running Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!