Rumah > pembangunan bahagian belakang > Golang > Bagaimana anda debug pergi kod menggunakan GDB atau debuggers lain?

Bagaimana anda debug pergi kod menggunakan GDB atau debuggers lain?

Emily Anne Brown
Lepaskan: 2025-03-21 12:49:38
asal
1004 orang telah melayarinya

Bagaimana anda debug pergi kod menggunakan GDB atau debuggers lain?

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:

  1. 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>
    Salin selepas log masuk

    Perintah ini memastikan bahawa pengkompil GO tidak mengoptimumkan kod dan termasuk simbol debugging yang diperlukan.

  2. Mulakan GDB:
    Sebaik sahaja program anda disusun, anda boleh memulakan GDB:

     <code class="sh">gdb ./your_program</code>
    Salin selepas log masuk
  3. 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>
    Salin selepas log masuk

    Ini menetapkan titik putus di titik masuk program anda.

  4. Jalankan program:
    Gunakan perintah run untuk memulakan pelaksanaan:

     <code class="gdb">(gdb) run</code>
    Salin selepas log masuk

    Program anda akan dijalankan sehingga ia menjadi titik putus.

  5. Periksa pembolehubah:
    Anda boleh memeriksa pembolehubah menggunakan arahan print :

     <code class="gdb">(gdb) print myVariable</code>
    Salin selepas log masuk

    Untuk jenis go khusus seperti kepingan atau peta, anda mungkin perlu menggunakan cetakan cantik, yang boleh didapati di repositori delve .

  6. Melangkah melalui kod:
    Gunakan arahan next dan step untuk bergerak melalui baris kod mengikut baris:

     <code class="gdb">(gdb) next (gdb) step</code>
    Salin selepas log masuk
  7. Teruskan pelaksanaan:
    Gunakan continue membiarkan program dijalankan sehingga titik putus seterusnya:

     <code class="gdb">(gdb) continue</code>
    Salin selepas log masuk

Ingat, sementara GDB boleh digunakan, ia tidak direka khusus untuk GO, yang boleh membawa kepada batasan dalam memeriksa struktur khusus dan goroutine dengan berkesan.

Apakah amalan terbaik untuk menubuhkan titik putus dalam GDB?

Menyediakan titik putus dengan berkesan dalam menggunakan GDB memerlukan pemahaman kedua -dua alat dan bahasa. Berikut adalah beberapa amalan terbaik:

  1. 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>
    Salin selepas log masuk
  2. Elakkan menetapkan titik putus dalam fungsi yang digariskan:
    Pengkompil GO boleh dalam fungsi dalam talian, menjadikan titik putus dalam fungsi tersebut tidak berkesan. Anda boleh menggunakan bendera -gcflags "all=-l" bendera semasa penyusunan untuk melumpuhkan inlining.
  3. 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>
    Salin selepas log masuk
  4. 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>
    Salin selepas log masuk
  5. 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>
    Salin selepas log masuk
  6. 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>
    Salin selepas log masuk

Bolehkah anda mengesyorkan mana -mana debuggers alternatif untuk pergi selain GDB?

Ya, terdapat beberapa alternatif untuk GDB yang direka khusus atau sesuai untuk Debugging GO. Berikut adalah beberapa cadangan:

  1. 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>
    Salin selepas log masuk

    Untuk mula menyahpepijat dengan Delve:

     <code class="sh">dlv debug your_program.go</code>
    Salin selepas log masuk
  2. Kod Studio Visual dengan Pelanjutan Go:
    VSCode, apabila digabungkan dengan lanjutan Go, memberikan pengalaman debugging yang kaya dengan sokongan untuk menetapkan titik putus, melangkah melalui kod, dan memeriksa pembolehubah, semuanya dalam IDE moden.
  3. Goland:
    Goland adalah IDE Jetbrains untuk GO, menawarkan debugger yang komprehensif dengan ciri-ciri seperti visualisasi Goroutine, jejak timbunan, dan antara muka mesra pengguna untuk menetapkan titik putus dan memeriksa kod.
  4. GDB dengan sambungan GO:
    Semasa disebut dalam soalan pertama anda, perlu diperhatikan bahawa anda dapat meningkatkan keupayaan debugging GDB dengan custom-custom-cetak dan perintah dari repositori delve , menjadikannya lebih sesuai untuk keperluan debugging khusus.

Bagaimana anda mengendalikan dan memeriksa goroutin semasa sesi debugging di Go?

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:

  1. Senaraikan semua goroutin:
    Gunakan arahan goroutines untuk menyenaraikan semua goroutin yang berjalan:

     <code class="delve">(dlv) goroutines</code>
    Salin selepas log masuk

    Ini akan memberi anda senarai goroutin yang bernombor.

  2. 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>
    Salin selepas log masuk

    Perintah ini mengubah konteks kepada goroutine yang ditentukan.

  3. Periksa keadaan goroutine:
    Gunakan perintah info goroutines untuk mendapatkan maklumat terperinci mengenai keadaan semasa semua goroutin:

     <code class="delve">(dlv) info goroutines</code>
    Salin selepas log masuk
  4. 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>
    Salin selepas log masuk

    Kemudian, apabila titik putus dipukul, anda boleh beralih antara goroutine untuk memeriksa negeri mereka.

  5. Gunakan jejak timbunan:
    Perintah bt (backtrace) dalam Delve boleh digunakan untuk melihat timbunan goroutine semasa:

     <code class="delve">(dlv) bt</code>
    Salin selepas log masuk
  6. 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>
    Salin selepas log masuk

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!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan