GDB, yani GNU Project Debugger, Richard Stallmann tarafından geliştirilmiş etkili bir hata ayıklama programıdır. Bilidiği gibi hata alma programlama dünyasında çok sık rastlanan bir durumdur ve özellikle de karmaşık ve uzun kodlarda hatanın nerden kaynaklandığını bulmak, hatayı düzeltmekten daha zor bir hal almaktadır. Bu gibi durumlarda programı adım adım çalıştıracak ve her adımda değişkenleri kontrol edebilmemizi sağlayan yardımcı GDB programlara ihtiyaç duyulmaktadır. Gdb programı öğrenilmesi ve uygulanması kolay bir programdır ve C,C++, Pascal,Java,Ada,Objective-C gibi diller tarafından desteklenmektedir. İstendiğinde internetten ücretsiz olarak indirilebilen bu program kısa sürede hataya neden olan ifadeyi kod satırları arasında bulmamıza yardımcı olur.
Her programlama dili için ayrı kalıplar kullanılmaktadır. Örnek olarak ANSİ C 'de hata ayıklamanın nasıl yapıldığını adım adım görelim.
1) Öncelikle programımızı derlerken “gcc” komutunun yanıda bir de “-g” eklemeliyiz. Böylece derleyinin hata ayıklamak için gerekli kodları da programımıza eklemesini sağlamış oluruz.
> Gcc deneme.c – o den -g
2) Gdb programını derlenen programımız üstünde çalıştırırız.
> Gdb den
GNU gdb Red Hat Linux (6.5-8.fc6rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
(gdb)
3) “break main” komutuyla programın “main” fonksiyonuna kadar çalıştırılması ve burada durması sağlanır.(istenilirse break [herhangi bir fonksiyon adı] yada [satır numarası] da verilebilir. Aynı şeklide bu noktalarda da fonksiyonun duraksaması sağlanır.)
> break main
Breakpoint 1 at 0x8048395: file deneme.c, line 21.
>break fnc
Breakpoint 2 at 0x804838a: file deneme.c, line 28.
>break 30
Breakpoint 3 at 0x8048400: file deneme.c, line 30.
4) Daha sonra “run” komutuyla program çalıştırılır ve programın daha önceden belirlenen “break” noktasına kadar gelmesi sağlanır.
>run
Starting program: /home/den
Breakpoint 1, main () at deneme.c:21
21 for (k=4;k<8;k++)
şimdi programımız 21. satıra kadar gelmişve burada bizim vereceğimiz yeni komutu beklemeye başlamıştır.
5) Buradan itibaren kontrollü bir şekilde ilerlenir. Sıklıkla kullanılan komutlar şunlardır:
next: | Bir sonraki satıra geçer. Eğer fonksiyon çağrılmışsa fonksiyonu bitirir ve adımlarını tek tek göstermeden çıkar. Sadece “n” ile ilerlenebilir). |
---|---|
step: | Next ile aynıdır ancak fonksiyon çağrılmışsa fonksiyonun başladığı noktaya gider ve onun adımlarını da ekranda tek tek gösterir.(kısaca “s” kullanılabilir.) |
print [değişken]: | İstenilen anda değişkenin değeri 1 defa ekrana basılabilir.(kısaca “p” kullanılabilir.) |
print [değişken]++: | Yazılan değişkene 1 eklenip ekrana basılabilir. Değerin programdaki orjinal hali de değiştirilmiş olur. |
display [değişken]: | Bu değişkenin değerinin sürekli olarak ekrana basılmasını sağlar. Aynı andan birden fazla değişken için yapılabilir. Sırayla hepsi, her adımda ekrana gelir. |
undisplay [sayı]: | Bu numaralı değişken bundan sonra her adımda ekrana basılmaz. |
backtrace: | O anda programda nerede olduğu bilgisini ekrana getirir. |
continue: | İkinci bir “breakpoint”e yoksa programın sonuna kadar devam eder. |
finish: | İçinde bulunulan fonksiyonun sonuna kadar “next” komutunu çalıştırır. |
delete [sayı]: | Bu numaralı breakpoint silinir. Artık program o noktada duraklama yapmaz. |
help: | Yardım konuları ekrana basılır. Daha sonra bu konulardan biri seçilip başına help komutu konularak tekrar yazılırsa (örneğin “help next”) o komutun kullanımı ekrana gelir. |
quit: | Gdb programından çıkılır. |
Görüldüğü gibi ANSI-C dilinde yazılmış bir kodun her adımını denetlememizi sağlayan bu program, uzun ve yorucu bir süreç olan hata ayıklama ve düzeltme sürecini etkili bir biçimde kısaltmaktadır. Aynı zamanda açık kaynaklı bir program olduğu için (GNU public licence-halk lisansı: herkesin kullanımına ve geliştirmesine açık kaynak kodlu) internetten kolayca erişilebilmekte ve yeni sürümleri daha da verimli programların kullanıma sunulmasını sağlamaktadır.