Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mendapatkan Nama Fungsi Semasa dalam Go untuk Penyahpepijatan?

Bagaimanakah Saya Boleh Mendapatkan Nama Fungsi Semasa dalam Go untuk Penyahpepijatan?

Patricia Arquette
Patricia Arquetteasal
2024-12-13 02:58:10534semak imbas

How Can I Get the Current Function's Name in Go for Debugging?

Cara Mendapatkan Nama Fungsi untuk Penyahpepijatan

Untuk meningkatkan keupayaan penyahpepijatan, mendapatkan nama fungsi semasa adalah penting. Sama seperti makro FUNGSI gcc, Go menyediakan mekanisme untuk mendapatkan maklumat ini.

Pertimbangkan fungsi berikut:

func foo() {
    trace()
}

Kami menyasarkan untuk mencetak maklumat secara automatik seperti "Memasuki foo()...".

Pakej masa jalan menawarkan yang diperlukan fungsi:

import "fmt"

func trace() {
    pc := make([]uintptr, 10)  // At least one entry required
    runtime.Callers(2, pc)

    // Get the function associated with the program counter
    f := runtime.FuncForPC(pc[0])

    // Obtain the file name, line number, and function name
    file, line := f.FileLine(pc[0])
    fmt.Printf("%s:%d %s\n", file, line, f.Name())
}

Dalam skrip ini, Pemanggil mengisi kepingan pc dengan pembilang program yang dikaitkan dengan fungsi panggilan. Kami kemudian menggunakan FuncForPC untuk mendapatkan semula fungsi yang dikaitkan dengan pembilang program pertama dalam kepingan. Akhir sekali, FileLine menyediakan nama fail, nombor baris dan nama fungsi, yang dicetak ke konsol.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nama Fungsi Semasa dalam Go untuk Penyahpepijatan?. 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