Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk debug golang linux

Bagaimana untuk debug golang linux

PHPz
PHPzasal
2023-05-14 15:25:38955semak imbas

Bahasa Go ialah bahasa pengaturcaraan peringkat tinggi yang diterbitkan untuk pembangunan yang lebih mudah dan lebih pantas. Ia bukan sahaja boleh dijalankan pada berbilang sistem pengendalian seperti Windows, MacOS dan Linux, tetapi juga menyediakan alat penyahpepijatan yang berkuasa Membantu pembangun menyelesaikan masalah. Artikel ini akan memperkenalkan cara menyahpepijat program bahasa Go pada sistem Linux.

Alat Penyahpepijatan

Bahasa Go menyediakan penyahpepijat terbina dalam - go debug, tetapi kecekapan tinggi Go turut membawa banyak cabaran penyahpepijatan. Dlv (https://github.com/go-delve/delve) ialah penyahpepijat moden untuk bahasa Go yang menyokong ciri penyahpepijatan khusus Go. Dlv menyediakan fungsi penyahpepijatan biasa seperti pengesanan satu langkah, melihat pembolehubah, mengubah suai pembolehubah dan titik putus. Selain itu, GDB juga menyokong penyahpepijatan bahasa Go, tetapi ia tidak dapat memahami penjadual bahasa Go, jadi ia lebih sesuai untuk pembangunan kernel atau penyahpepijatan program yang hanya perlu menggunakan beberapa fungsi khusus Go.

Memasang Dlv

Dlv ditulis dalam bahasa Go, jadi pemasangannya memerlukan pemasangan bahasa Go itu sendiri terlebih dahulu. Anda boleh memuat turun versi terkini pakej pemasangan bahasa Go daripada tapak web rasmi (https://golang.org/dl/) dan mengkonfigurasinya ke dalam pembolehubah persekitaran.

Selepas memasang bahasa Go, kita perlu terlebih dahulu memasang perpustakaan yang Dlv bergantung pada - utiliti Linux yang dipautkan secara dinamik:

sudo apt-get update
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

Kemudian laksanakan arahan berikut untuk memasang Dlv:

go get -u github.com/go-delve/delve/cmd/dlv

Arahan di atas Pasang Dlv ke dalam direktori $GOPATH/bin, anda boleh menambahnya pada pembolehubah PATH secara manual atau menambahnya pada PATH dengan arahan berikut:

echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bashrc
source ~/.bashrc

Kompilkan penyahpepijat

Kita perlu Masukkan direktori di mana program berada, gunakan go build untuk menyusun atur cara dan menjana fail binari. Dengan mengandaikan program kami dinamakan debug-demo, kami boleh menyusunnya dengan arahan berikut:

go build -gcflags "-N -l" -o debug-demo
  • -gcflags "-N -l": Tambah bendera kompilasi untuk memastikan pengkompil tidak akan mengoptimumkan kod , dengan itu Mudah untuk nyahpepijat.
  • -o debug-demo: Namakan fail boleh laku debug-demo yang dijana.

Untuk menyelesaikan masalah kod sumber yang sedang dipasang, kita juga boleh menggunakan arahan go env untuk mendapatkan nilai CGO_ENABLED, tetapkan kepada 0, dan kemudian susun semula:

go env
go build -gcflags "-N -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go

Tetapkan rehat Mengklik

untuk menetapkan titik putus dalam atur cara ialah operasi yang paling biasa semasa nyahpepijat. Kita boleh menetapkan titik putus di mana-mana dalam kod untuk menunggu sehingga pelaksanaan program mencapai lokasi tersebut.

Menggunakan Dlv, anda boleh menetapkan titik putus dalam dua cara berikut:

  1. Antara muka grafik (disyorkan)

Menggunakan antara muka grafik Dlv boleh menjadi lebih intuitif Memanipulasi dan mengubah suai program. Jalankan arahan berikut, dan kemudian antara muka grafik akan dibuka secara automatik:

dlv debug ./debug-demo
  1. Baris arahan

Laksanakan arahan berikut untuk memasuki mod baris arahan Dlv:

dlv debug ./debug-demo --headless --listen=:2345 --api-version=2

Masukkan Dlv Akhirnya, kita boleh menetapkan titik putus menggunakan perintah break (atau disingkat sebagai b):

(b)reak {<location>|<function>|<filename>:<line>|<remote package path>}: 设置断点
(b)reakpoints: 显示当前所有的断点
(d)elete {<breakpoint#>|<breakpoint.id>}: 删除断点#或通过Breakpoint.id删除指定断点
(c)ontinue: 从当前位置继续执行程序,直到下一个断点或程序完结

Sebagai contoh, kita boleh menetapkan titik putus pada baris 10 program:

(b)reak main.go:10

Kawal atur cara untuk dijalankan

Semasa menjalankan program, anda boleh menggunakan langkah (atau disingkat sebagai s) dan arahan seterusnya (atau disingkat sebagai n) untuk mengawal program berjalan:

(s)tep: 单步调试,如果当前位置是函数,则进入该函数内部
(n)ext: 单步调试,如果当前位置是函数,则不进入该函数内部

Lihat pembolehubah

Dlv juga disediakan Untuk memaparkan pembolehubah, gunakan perintah cetak (atau disingkat p) untuk melihat pembolehubah dalam skop semasa:

(p)rint <variable>: 显示变量

Contohnya , kita boleh menggunakan arahan berikut untuk melihat pembolehubah a dan pembolehubah b:

(p)rint a
(p)rint b

Ubah suai pembolehubah

Selain melihat pembolehubah, Dlv juga menyokong mengubah suai nilai pembolehubah ubah suai nilai pembolehubah:

(s)et <variable> = <value>: 修改变量的值

Sebagai contoh, kita boleh menggunakan arahan berikut untuk menetapkan nilai pembolehubah a Diubah suai kepada 100:

(s)et a = 100

Ringkasan

Artikel ini memperkenalkan cara menggunakan Dlv untuk menyahpepijat program Go pada sistem Linux. Mula-mula, kami memasang bahasa Go dan penyahpepijat Dlv, kemudian menggunakan go build untuk menyusun atur cara dan menetapkan titik putus dalam program, menggunakan antara muka grafik Dlv atau baris arahan untuk mengawal program untuk dijalankan, dan melihat serta mengubah suai nilai pembolehubah untuk menyelesaikan Masalah Go yang dihadapi semasa penyahpepijatan program. Saya berharap melalui artikel ini, pembaca dapat menguasai kemahiran asas menggunakan Dlv untuk menyahpepijat program Go di bawah sistem Linux.

Atas ialah kandungan terperinci Bagaimana untuk debug golang linux. 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