Debugging Go Code boleh dilakukan dengan berkesan menggunakan GDB, Debugger GNU, yang digunakan secara meluas untuk menyahpepijat C, C, dan kini pergi program. Berikut adalah panduan langkah demi langkah mengenai cara debug pergi menggunakan GDB:
Menyusun program Go dengan simbol debug:
Sebelum anda boleh menggunakan GDB, anda perlu menyusun program GO anda dengan maklumat debug yang disertakan. Gunakan pilihan -gcflags
untuk membolehkan ini:
<code class="sh">go build -gcflags "all=-N -l" your_program.go</code>
Perintah ini memastikan bahawa pengkompil GO tidak mengoptimumkan kod dan termasuk simbol debugging yang diperlukan.
Mulakan GDB:
Sebaik sahaja program anda disusun, anda boleh memulakan GDB:
<code class="sh">gdb ./your_program</code>
Tetapkan titik putus:
Dalam GDB, anda boleh menetapkan titik putus menggunakan arahan break
. Untuk pergi, anda sering perlu menentukan nama fungsi secara langsung sejak fail: Notasi baris mungkin tidak berfungsi secara langsung:
<code class="gdb">(gdb) break main.main</code>
Ini menetapkan titik putus di titik masuk program anda.
Jalankan program:
Gunakan perintah run
untuk memulakan pelaksanaan:
<code class="gdb">(gdb) run</code>
Program anda akan dijalankan sehingga ia menjadi titik putus.
Periksa pembolehubah:
Anda boleh memeriksa pembolehubah menggunakan arahan print
:
<code class="gdb">(gdb) print myVariable</code>
Untuk jenis go khusus seperti kepingan atau peta, anda mungkin perlu menggunakan cetakan cantik, yang boleh didapati di repositori delve
.
Melangkah melalui kod:
Gunakan arahan next
dan step
untuk bergerak melalui baris kod mengikut baris:
<code class="gdb">(gdb) next (gdb) step</code>
Teruskan pelaksanaan:
Gunakan continue
membiarkan program dijalankan sehingga titik putus seterusnya:
<code class="gdb">(gdb) continue</code>
Ingat, sementara GDB boleh digunakan, ia tidak direka khusus untuk GO, yang boleh membawa kepada batasan dalam memeriksa struktur khusus dan goroutine dengan berkesan.
Menyediakan titik putus dengan berkesan dalam menggunakan GDB memerlukan pemahaman kedua -dua alat dan bahasa. Berikut adalah beberapa amalan terbaik:
Gunakan nama fungsi untuk titik putus:
Oleh kerana runtime Go adalah kompleks, dan fail: titik putus baris tidak boleh dipercayai, gunakan nama fungsi sebaliknya:
<code class="gdb">(gdb) break main.main (gdb) break yourPackage.YourFunction</code>
-gcflags "all=-l"
bendera semasa penyusunan untuk melumpuhkan inlining. Tetapkan titik putus sebelum melancarkan program:
Tetapkan titik putus anda sebelum anda memulakan program untuk memastikan mereka dipukul secepat mungkin:
<code class="gdb">(gdb) break main.main (gdb) run</code>
Gunakan titik putus bersyarat:
Untuk meminimumkan perhentian yang tidak perlu, gunakan titik putus bersyarat:
<code class="gdb">(gdb) break main.main if someCondition == true</code>
Maklumat Runtime Leverage Go:
Gunakan info goroutines
untuk mendapatkan senarai goroutin dan tetapkan titik putus dalam goroutine seperti yang diperlukan:
<code class="gdb">(gdb) info goroutines</code>
Gunakan titik jam tangan perkakasan untuk perubahan ingatan:
Jika anda memantau lokasi memori tertentu, titik jam tangan perkakasan boleh menjadi berkesan:
<code class="gdb">(gdb) watch *somePointer</code>
Ya, terdapat beberapa alternatif untuk GDB yang direka khusus atau sesuai untuk Debugging GO. Berikut adalah beberapa cadangan:
Menyelidiki:
Delve adalah debugger yang paling popular dan berkuasa untuk GO. Ia memberikan sokongan yang sangat baik untuk goroutine, dan antara muka mereka direka untuk berfungsi dengan lancar dengan runtime Go. Anda boleh memasangnya menggunakan:
<code class="sh">go install github.com/go-delve/delve/cmd/dlv@latest</code>
Untuk mula menyahpepijat dengan Delve:
<code class="sh">dlv debug your_program.go</code>
delve
, menjadikannya lebih sesuai untuk keperluan debugging khusus.Pengendalian dan pemeriksaan goroutin semasa sesi debugging di GO boleh mencabar tetapi penting untuk memahami program serentak. Berikut adalah cara anda boleh melakukannya menggunakan Delve, yang lebih sesuai untuk tugas ini daripada GDB:
Senaraikan semua goroutin:
Gunakan arahan goroutines
untuk menyenaraikan semua goroutin yang berjalan:
<code class="delve">(dlv) goroutines</code>
Ini akan memberi anda senarai goroutin yang bernombor.
Beralih antara goroutin:
Untuk beralih ke goroutine yang berbeza, gunakan arahan goroutine
diikuti dengan bilangan goroutine yang ingin anda periksa:
<code class="delve">(dlv) goroutine 2</code>
Perintah ini mengubah konteks kepada goroutine yang ditentukan.
Periksa keadaan goroutine:
Gunakan perintah info goroutines
untuk mendapatkan maklumat terperinci mengenai keadaan semasa semua goroutin:
<code class="delve">(dlv) info goroutines</code>
Tetapkan titik putus dalam goroutin:
Anda boleh menetapkan titik putus khusus untuk goroutine dengan menetapkannya pada panggilan fungsi di mana goroutine dilancarkan. Contohnya:
<code class="delve">(dlv) break main.someFunction</code>
Kemudian, apabila titik putus dipukul, anda boleh beralih antara goroutine untuk memeriksa negeri mereka.
Gunakan jejak timbunan:
Perintah bt
(backtrace) dalam Delve boleh digunakan untuk melihat timbunan goroutine semasa:
<code class="delve">(dlv) bt</code>
Periksa pembolehubah dalam goroutin:
Sekali dalam konteks goroutine, anda boleh memeriksa pembolehubah seperti yang anda lakukan dalam benang utama:
<code class="delve">(dlv) print myVariable</code>
Dengan menggunakan teknik ini, anda boleh debug secara berkesan dan memahami tingkah laku program Go anda di pelbagai goroutine.
Atas ialah kandungan terperinci Bagaimana anda debug pergi kod menggunakan GDB atau debuggers lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!