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 dosya dan 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 dosya sı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. |