Farih.co.id
Home Programming Memulai GNU Debugger di Linux: Kursus Singkat

Memulai GNU Debugger di Linux: Kursus Singkat

blurred out computer screens

Debugging adalah keterampilan yang sangat diperlukan bagi pemrogram dan peneliti keamanan. Memiliki pemahaman yang kuat tentang debugging memungkinkan Anda memahami executable pada tingkat yang lebih rendah dan menangkap kesalahan apa pun yang mengintai.


VIDEO MUO HARI INI

GULIR UNTUK MELANJUTKAN ISI

Debugger GNU atau, GDB, adalah alat debugging abadi yang telah diandalkan oleh para programmer selama bertahun-tahun. Berikut cara menggunakan GDB di Linux.


Mempersiapkan Contoh Program

Untuk menjelajahi fitur-fitur GDB, Anda memerlukan executable untuk bereksperimen. Sebagai demonstrasi, Anda akan menjalankan GDB pada program pemeriksaan kunci satu kali dengan kode sumber dan simbol debug tersedia, satu kali tanpa kode sumber, dan pada program multithread sederhana yang mencetak pesan ke layar, baik yang ditulis dalam C maupun dikompilasi dengan GCC ( Kompiler GNU C).

mengkompilasi dan mengeksekusi program sampel

Kemungkinan besar Anda akan menjalankan GDB pada program Anda sendiri. Jadi pastikan untuk mengkompilasinya dengan -G tandai dengan gcc untuk mengaktifkan simbol debug.

Tanpa adanya simbol debug dan dengan biner yang sangat terkelupas, Anda harus melakukan debug dengan pembongkaran program. Ini mengharuskan Anda memiliki pemahaman yang kuat tentang bahasa rakitan dan cara kerja alokasi memori di Linux untuk memahami data dalam tumpukan dan register.

Menjalankan Program di GDB

mengeksekusi program di gdb

Anda menjalankan program di GDB dalam beberapa cara. Ketikkan keduanya gdb dan setelah dimuat, ketik berlari. Atau mulai gdb lalu gunakan file perintah, muat biner ke gdb, lalu jalankan dengan berlari memerintah.

Jika program Anda memerlukan argumen baris perintah agar berfungsi dengan baik, pastikan untuk menambahkan argumen setelah nama program. Berikut sintaks untuk memuat program ke GDB dan mengeksekusinya dengan argumen:

 gdb <program>
run <args>

Atau:

 gdb
file <program>
run <args>

Menetapkan Breakpoint Dengan GDB

mengatur dan menghapus breakpoint

Breakpoint dalam debugging secara manual mengatur penghentian keras dalam kode yang menghentikan aliran eksekusi ketika program mencapai breakpoint. Menetapkan breakpoint memungkinkan Anda menelusuri kode dan memeriksa bagaimana setiap tahapan eksekusi memengaruhi data dan variabel.

Di GDB, saat Anda men-debug program dengan simbol debug, Anda dapat menyetel breakpoint berdasarkan nama fungsinya atau menyetel breakpoint berdasarkan nomor baris. Berikut sintaksnya:

 break main
break 47

Untuk melihat semua breakpoint di sesi debugging saat ini, ketik:

 info breakpoints 

Untuk menghapus breakpoint tertentu atau beberapa breakpoint, ketik:

 delete 2
delete 3-5

GDB juga memungkinkan Anda menyetel breakpoint bersyarat, artinya program hanya akan berhenti jika kondisi tertentu terpenuhi selama eksekusi. Ini bisa berupa perubahan nilai variabel atau pemanggilan fungsi yang gagal atau, apa pun yang Anda inginkan. Berikut sintaks untuk menyetel breakpoint bersyarat:

 break <location> if n == 2 

Jika Anda ingin melanjutkan eksekusi program setelah mencapai breakpoint, ketikkan melanjutkan memerintah:

 continue 

Melangkah Melalui Kode

Menelaah kode sangat penting untuk memahami bagaimana program menangani data. Dengan menelusuri berbagai fungsi dalam program Anda dan memeriksa status data, Anda bisa mendapatkan pemahaman yang lebih baik tentang bagaimana program mengimplementasikan logika yang Anda tulis dalam kode.

Ini juga membantu Anda mendeteksi akar kerusakan dan mempelajari perilaku program dengan presisi tinggi karena Anda dapat menelusuri setiap baris kode sesuai keinginan. Anda dapat menelusuri kode dengan tiga cara utama di GDB:

  1. melangkah: Perintah ini memberitahu GDB untuk masuk ke baris berikutnya dari file sumber. Hal ini memungkinkan Anda menelusuri panjang kode sumber baris demi baris.
  2. Berikutnya: Perintah ini mengeksekusi baris kode sumber berikutnya di dalam fungsi saat ini dan kemudian berhenti. Berikutnya memperlakukan suatu fungsi sebagai satu baris jadi jika Anda menggunakan next sebelum pemanggilan fungsi, ia akan memperlakukannya sebagai satu baris dan melangkahinya, tidak seperti melangkah memerintah.
  3. menyelesaikan: Perintah finish mengeksekusi semua baris yang tersisa di dalam fungsi saat ini dan kemudian berhenti.

Memeriksa Variabel

menggunakan perintah tampilan

Saat Anda menelusuri kode, Anda ingin memeriksa nilai variabel untuk melihat bagaimana logika program mengubahnya. Berikut sintaks untuk melihat nilai variabel di GDB:

 print <variable> 

Jika Anda ingin mencetak perubahan nilai suatu variabel setiap kali diperbarui, Anda harus menggunakan perintah display. Ini sangat berguna ketika Anda ingin melacak dan mencetak nilai variabel dalam satu lingkaran:

 display <variable> 

Menetapkan Titik Pengawasan

Watchpoint dan conditional breakpoint berkaitan erat karena keduanya merespons perubahan dalam suatu program. Watchpoint digunakan untuk melacak perubahan data dalam kode. Misalnya, Anda mungkin ingin program berhenti setiap kali nilai variabel berubah. Berikut cara melakukannya dengan GDB:

 watch <variable_name> 

Debugging Khusus Thread Dengan GDB

debugging khusus thread di gdb

GDB memungkinkan Anda melakukan debugging khusus thread saat bekerja dengan program multithread. Untuk demonstrasi, kami akan bekerja dengan Program C sederhana yang menggunakan empat thread untuk mencetak pesan pada setiap thread.

Untuk melihat thread yang sedang muncul di program Anda, gunakan info memerintah:

 info threads 

Untuk bekerja dengan thread tertentu, Anda dapat memilihnya dari daftar menggunakan nomor indeksnya. Misalnya:

 thread 2 

Setelah memilih thread, Anda dapat menelusuri alur eksekusinya menggunakan melangkah, BerikutnyaDan menyelesaikan perintah seperti yang ditunjukkan di atas.

Debugging Jarak Jauh Dengan GDB

menghubungkan ke gbdserver jarak jauh

Anda juga dapat men-debug program yang terletak di sistem lain dari jarak jauh. Untuk melakukannya, Anda perlu menyiapkan gdbserver di mesin target. Anda dapat dengan mudah menginstalnya menggunakan manajer paket default distribusi Anda atau manajer paket lain yang telah Anda instal di sistem Anda.

Misalnya, untuk menginstal gdbserver di sistem berbasis Ubuntu atau Debian, gunakan APT:

 sudo apt install gdbserver 

Setelah terinstal, pindah ke folder biner dan jalankan perintah ini untuk memulai gdbserver:

 gdbserver <ip>:<port> <binary> 

gdbserver harus mengembalikan output yang aktif dan mendengarkan pada port yang Anda tentukan. Sekarang di mesin klien, mulai GDB dan kemudian sambungkan ke server jarak jauh menggunakan target memerintah:

 target remote <server_ip>:<port> 

contoh skrip gdb

GDB memungkinkan pemrogram untuk menulis skrip GDB yang akan menjalankan perintah GDB secara otomatis. Ini sangat membantu ketika Anda mencoba men-debug bagian kode yang sama beberapa kali. Daripada harus menyetel breakpoint, menelusuri kode, dan mencetak nilai variabel setiap kali Anda memuat biner, Anda dapat menggunakan skrip GDB untuk mengotomatiskan seluruh proses.

Berikut ini contohnya:

 set logging enabled on
set logging file sample.out
break main
  command 1
  backtrace
  print N
  continue
end
quit

Dalam skrip di atas, Anda meminta GDB untuk mengaktifkan logging dan menyimpan log ke file bernama sampel.keluarlalu atur breakpoint di utama fungsi.

Untuk breakpoint nomor 1, dalam hal ini breakpoint pada fungsi main, jalankan perintah berikut: menelusuri kembali, mencetak, melanjutkan. Pada dasarnya, GDB pertama-tama akan menjalankan backtrace, kemudian mencetak nilai variabel “N”, melanjutkan eksekusi, dan akhirnya berhenti.

Untuk menjalankan skrip ini, gunakan:

 gdb -x <script> <binary> 

Sekarang Anda Tahu Cara Men-debug Program Anda Dengan GDB!

Proses debug adalah keterampilan yang penting dan proses debug dengan GDB adalah keterampilan yang hebat untuk dimiliki dalam repertoar Anda. Berbagai fitur GDB seperti menelusuri kode, mengatur breakpoint, debugging thread selektif, dan banyak lagi menjadikannya alat yang ampuh saat men-debug binari di Linux.

Jika Anda ingin men-debug aplikasi di Windows, Anda mungkin mempertimbangkan untuk mempelajari lebih lanjut tentang debugger asli Windows, WinDBG.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad