Standart C Programlama Dili


B.2. GDB İle Hata Düzeltme

En küçüğünden, en büyüğüne, yazılan her programda kaçınılmaz olarak hatalar olabilir. Bunlar genelde, programın beklenmeyen sonuçlar vermesi, sonsuz döngüye girip takılması veya hatalı işlem veya bellek erişimi yapması yüzünden olağan dışı sonlanması şeklinde ortaya çıkabilir. Bu tip hataların bulunup düzeltilmesi işlemine hata düzeltme (veya hata ayıklama) diyoruz. Programın içine ilgili yerlere printf deyimleri koyarak programın izlediği durumu ve değişkenlerin aldığı değerleri izlemek, hataları belirlemek için basit bir yöntem olarak kullanılabilir. Ancak, yürütme sırası tanılama için uygun bir hata düzelticisi kullanmak daha verimlidir.

Herhangi bir hata düzelticisi başka bir programı (örneğin, sizin yazdığınız bir programı) özel ve kontrollü bir ortamda çalıştırır. Bu şekilde, program kodundaki adımları tek tek çalıştırabilir, değişkenlerin, bellek konumlarının ve işlemci yazmaçlarının aldığı değerleri okuyup, gerektiğinde değiştirebilirsiniz.

Bu kısımda GNU Hata Düzelticisine (GDB) bir örnek üzerinden bakacağız. Kavramsal olarak burada anlatılanlar diğer hata düzelticileri için de geçerlidir. GDB hakkında daha detaylı bilgiler için (sadece İngilizce olarak sunulan) Çevrim içi GDB dokümantasyonuna bakmanız gerekebilir.

Kurulum

Sisteminizde gdb komutunun bulunup bulunmadığını kontrol etmek için

$ gdb --version

girdiğinizde, gelen çıktının ilk satırının aşağıdakine benzer olması beklenir:

GNU gdb (Ubuntu 10.1-2ubuntu2) 10.1.…

Burada GNU gdb’den sonra gelen uyarlama bilgisinin sizin sistemde farklı olabileceğine dikkat ediniz. Eğer gdb kurulu değilse, yönetici (root) kullanıcısı ile sisteminize uygun olarak

# apt install gdb

veya

# yum install gdb

komutu ile kurmaya çalışabilirsiniz.

Komut Satırı Seçenekleri

gdb komutunun sık kullanılan bazı seçenekleri şunlardır:

-quiet
-silent
-q
Etkileşimli oturumu, sürüm ve telif hakkı bilgilerini görüntülemeden başlat.
-args prog arg ... prog isimli programı arg ... parametreleri ile başlat.
-exec prog
-e prog
Çalıştırılacak program dosyasının adı.
-core dosya
-c dosya
-c sayı
-pid sayı
-p sayı
Burada verilen tüm seçenekler ve dosya ile sayı aslında eşanlamlıdır: Eğer ondalık bir sayıya benziyorsa, GDB numarası verilmiş olan çalışan sürece bağlanır, yoksa verilen ismi bir dosya ismi olarak değerlendirip bir çekirdek dökümü dosyası olarak açmaya çalışır.
-symbols dosya
-s dosya
Sembol tablosunu dosyadan oku.
-se dosya Bu seçenek -s dosya -e dosya ile aynı anlama gelir. Sonuçta, gdb -se dosya komutu ile gdb dosya komutu aynı işe yarar. Benzer şekilde, gdb -se prog_dosyası -core core_dosyası ile gdb prog_dosyası core_dosyası komutları da aynı anlama gelir.
-command dosya
-x dosya
GDB komutlarını girdi dosyasından oku. Dosya sonuna gelindiğinde standart girdiden yeni komut girilmesi beklenir. Eğer -batch seçeneği de eklenirse, dosya sonuna gelindiğinde gdb komutu da sonlanır.