Giri�
Bu yaz�n�n amac�, daha �nce hi� debugger kullanmam��
kullan�c�lara ya da kullanan kullan�c�lara bu g�nl�k
�al��ma i�in daha ho� bir grafik ortam g�stermektir. gdb
isimli debugger'�n yapabildikleri ve sa�laml��� hakk�nda
�ok �ey yaz�labilir, ancak, her zaman oldu�u gibi ��retici
ama�lar i�in bunlar� basitle�tirmeye karar verdik :)
Debugger nedir?
" Bir zamanlar, tek i�i kendi kodu i�inde hata
bulmak i�in a�a��dakini kullanan bir programc� vard�:
/*Code*/
(...)
loop
change_a_variable;
show_value_of_variable;
end_loop
(...)
�al��ma zaman� i�erisinde, de�i�kenlerin de�erini
ara�t�rabilmek i�in kaynak kodu i�ine bir �ok kez bu
sat�rlar� eklemeye zorlanm��t�. Bu zor bir g�revdi ve
programc�n�n hayat�n� zorla�t�rmaktayd� ve kendi kodunda
hatalar� bulman�n zahmeti, o kodu yazman�n zahmetini ikiye
katl�yordu.(..)".
Kim kendini daha �nce b�yle bir durumda bulmad� ki? S�k
s�k program�m�zda hata olu�ur, her �eyi de�i�tirmi� ve
her�eyi denemi�izdir, denenecek az �ey kald���ndan bu
a�amada neredeyse derleyicinin hatal� oldu�una hemen hemen
kendi kendimizi ikna etmi�izdir... ��te burada hata bulucu
yaz�l�mlar devreye girer.
Debugger a�ama a�ama program�n�z�n �al��mas�n� kontrol
etmenizi sa�lar, bu �ekilde de�i�kenlerin durumu,
tan�mlanmas�, baz� ko�ullarda nas�l davrand�klar� kolayca
takip edilebilir. B�t�n bunlar, yine, program �al���rken
yap�l�r. Bu havada kalan tan�mlama yeterince a��k de�ilse,
bunu yaz�n�n ileriki a�amalar�nda daha a��k hale getirmeyi
umuyorum.
�yk�m�zde programc�n�n spy isminde, a�a��dakileri
yapmas�n� sa�layan bir debugger'� olsayd� neler olurdu:
jose# spy my_program
ve e�er spy'� yard�ma �a��rd�ktan sonra, programc�m�z
�unlar� yapabilseydi:
spy > execute my_program "up to line number
50"
spy > show me the value of the variable <X>
spy > what is the type of variable <X>
Muhtemelen, bu anda, hayali programc�m�z sevin�ten
havalara u�maktad�r, ��nk� en sonunda hatan�n sebebini
bulmu�tur.
A��k�a, spy ad�ndaki elayg�t� �ok kullan��l� olmu�tu,
��nk� programc�n�n program�n�n �al��t��� s�rada
de�i�kenlerin de�erlerini ve tan�mlanmalar�n� kontrol
edebilmesini sa�lam��t�r. Bu debugger'�n �z�d�r, ancak
tabii ki kabaca resimlendirilmi�tir.
Dikkat !!: Debugger'lar sadece debug
parametreleriyle �al��an derleyiciler ile derlenen
programlar ile �al���r. GNU gcc derleyicisi �rne�inde bu
parametre -g dir.
T�m Linux kullan�c�lar� i�in GNU Genel Lisans� ile
elde edilebilecek GDB (The GNU Source-Level Debugger)
ad�nda bir debugger vard�r (bu de�i�ik platformlarda da
bulunabilir). Bununla C, C++, Modula-2 ve assembler kodlar�
debug edilebilir.
Muhtemelen, �u anda kulland���n�z Linux bu yaz�l�ma
sahiptir, e�er de�ilse, Linux'�n�z� yenileyin veya program�n
kaynak kodunu bulun. Bu bir�ok yerde bulunabilir;)
Diyelim ki, /usr/src dizini alt�na kaynak kodlar�n�
kopyalad�n�z, sonra /usr/src/gdb-4.xxxx/gdb dizini alt�na
gidin ve doc dizinine inin. Orada make gdb.dvi;make
refcard.dvi komutunu kullanarak gdb dok�manlar�n�
olu�turabilirsiniz. Bu dosyalar t�m linux s�r�mlerinde
kolayca g�r�nt�lenebilir.
DDD nedir?
Gdb'nin ayr�nt�l� sunumu ve t�m komutlar�n� a��klamak
yerine, kullan�c� taraf�ndan �ok daha kolayl�kla
kullan�labilecek olan ddd (Display Data Debugger) isimli
ortam� a��klamak, yeni kullan�c�lar i�in �ok daha anlaml�
olacakt�r.
DDD ortam�, genellikle konu�an, ayarlanmas� �ok daha
kolay olan ve hata bulma i�in kullan�c�ya daha anla��l�r
bir aray�z sunar. Yine de, belirtilmelidir ki, ddd sadece
gdb �zerinde kullan�lan bir grafik ortamd�r. Bu nedenle
ddd'nin �al��t�r�lmas� i�in gdb'ye gereksinim vard�r.
Asl�nda, ddd kullan�c�n�n gdb �zerinde do�rudan de�i�iklik
yapmas�na izin vermektedir. DDD ile kullan�labilen dbx, xdb
gibi ba�ka debugger'lar da vard�r.
DDD i�in iyi bir bilgi kayna�� http://www.cs.tu-bs.de/softech/ddd/
adresinden elde edilebilir. Ayr�ca, e�er RedHat
kullan�yorsan�z kaynak kodlar�n� rpm format�nda
bulabilirsiniz. DDD'nin iki ayr� s�r�m�n� bulabilirsiniz,
Motif kitapl�klar�yla dinamik olarak derlenmi� s�r�m�,
di�eri ise statik olarak derlenmi� s�r�m�d�r. Statik
s�r�m kendi Motif kitapl�klar� olmayan kullan�c�lar
i�indir.
DDD'nin LESSTIF(http://www.lesstif.org)
kar��s�ndaki �u andaki durumunu dikkate alm�yorum. Motif'in
�cretsiz bir benzeri olan lesstif'in �u andaki durumu
hakk�nda pek bilgi sahibi de�ilim. K�sa bir zaman �nce, bir
yama sayesinde sadece lesstif alt�nda derlenebiliyordu. Bunu
1.2.13 �ekirdek ve lesstif 0.75 ile kulland�m (San�r�m ;).
L�tfen, lesstif projesinin sayfalar�na bu proje ile ilgili
daha fazla bilgi almak i�in bir g�z at�n�z.
��e giri�iyoruz, ddd'yi �al��t�rmam�zla birlikte,
�ununla kar��la��yoruz:
Resim 1: DDD ana ekran�
ddd'yi �a��rman�n �� de�i�ik yollar� vard�r;
ilkinden daha �nce bahsetmi�tik ve di�erlerini de a�a��da
bulacaks�n�z:
ddd <program> core
ddd <program> <process_id>
Core isimli dosya bir program ��kt��� zaman �retilir
ve ��k���n sebebi ile ilgili hatan�n olu�tu�u s�radaki
program�n durumu ile ilgili yararl� bilgiler i�erir. E�er
sizin sisteminiz core dosyalar� yaratm�yorsa, core
dosyalar� i�in �evre de�i�kenlerine bir g�z at�n�z ('ulimit
-a' hepsini g�sterir, ya da 'ulimit -c <de�er>' di�er
gerekli de�erleri veya maksimum boyutlar� g�sterir).
Proses id �al��ma zaman� s�ras�nda program� incelememizi
sa�lar.
ddd'nin grafik yap�s� bir i�i yapmak i�in birden fazla
yol sunar; Burada hepsini a��klayamam, ancak en basit
olanlar�n� a��klayaca��m. DDD'nin ana konsolunun en
alt�ndaki pencere, ddd'nin �al��t�rd��� t�m i�lemlerin
loglar�n� g�sterir. Bu log penceresi gdb'nin komut sat�r�ndan
�al��t�r�lmas�n� ��renmede �ok yararl� olabilir.
GUI ortam�
1. resim ana pencerenin 3 alt pencereye b�l�nd���n�
g�steriyor. En alttaki alt pencere yal�n debugger
consoludur (bizim durumumuzda bu gdb'dir). Burada, e�er ddd
aray�z�m�z olmasayd� burada do�rudan gdb komutlar�n�
kullanabilirdik. Ortadaki alt pencere ise program�n kaynak
kodunu g�stermektedir, ve �st alt pencere ise program�n
de�i�kenleri ve nesneleri i�in grafik bir ortamd�r. Son
olarak ise, ara� bar� (toolbar) ddd komutlar�n�n
�al��t�r�lmas�n�n kontrol�n� sa�lar.
Ana pencere d���nda ise �al��an proses i�in bir ve debug
edilen program�n kaynak kodu i�in de ayr� birer pencere
vard�r. Bunlar�n ikisi de iste�e ba�l�d�r.
ddd ile birlikte, hata bulma s�ras�nda gerekebilecek
yard�m i�in t�m kaynaklar gelmektedir. �rnek vermek
gerekirse, imle� aray�z �zerinde bir de�i�ken �zerine veya
aray�z �zerindeki herhangi bir butonun �zerine geldi�inde
ayr� bir dialog kutusu ekrana gelir; bu dialog kutusu o
andaki durumla ilgili gerekli bilgi verir. Ayr�ca, ana
pencerenin alt taraf�nda ise, ddd'nin durumu, hangi komutun
�al��t�r�ld��� ve o komutun ��kt�lar�n� g�stermektedir. Sa�
tarafta her t�rl� yard�ma bir popup men� sayesinde
ula��labilir. A��lan pencerede bir konu se�ip F1 tu�una
bast���n�zda daha fazla bilgi elde edilebilinir. Son olarak
gdb konsoludan "help" yazarak debugger hakk�nda genel yard�m
veya belli bir konu �zerinde yard�m al�nabilir.
Benimsenmi� olarak, ddd tek �er�evede birle�mi� �� alt
pencere sunmaktad�r. Ayr�ca, "Preferences" men�s� ddd
aray�z�ne benimsenmi� �ekil yerine ayr� pencereler
a�t�rabilir.
Resim 2. File men�s� i�in yard�m
Dipten ba�lang��
Debugger konsolu, debugger2�n kullan�m� ��renmemizde
ilk ad�mlar�m�z� ataca��m�z yerdir; gdb �zerinde deneyimli
kullan�c�lar ddd ile buradan �al��abilirler. Benim
durumumda bu konsol grafik aray�z �zerinden komutlar
�al��t�r�ld�k�a neler oldu�unu izleyebilmem i�in yard�mc�
olmu�tu. Commands-Command History se�imi o ana kadar
�al��t�r�lm�� t�m komutlar� listeler.
DDD'nin yapabileceklerini ��renebilmek i�in orijinal
dok�manlara bakmak daha yararl� olacakt�r. Her durumda
debugger ile bir ka� basit i�lemin nas�l yap�labilece�ini
a��klayaca��m.
Genel G�revler
Hata bulmak i�in, kaynak kodu y�kleme i�lemi men�lerden
File se�ene�i se�ilerek yap�labilir; kaynak kodunun i�eri�i
bu alanda g�r�nt�lenir. Bu a�amadan itibaren, kaynak koduna
g�z atarak, bir de�i�kenin de�eri ve tipi incelenebilir ve
program kontrol alt�nda �al��t�r�labilir...
Program�n ��kt�s� bir pencere ile izlenebilir ( Options
men�s�nden Run in Execution window ) veya debugger
konsolundaki program ��kt�s�ndan do�rudan izlenebilir ( bu
y�ntem program Motif veya ba�ka bir GUI tabanl�
kitapl�klar kullan�ld�ysa i�e yaramaz).
Kaynak kodu i�inde imleci herhangi bir de�i�ken �zerine
getirmeyi denerseniz, o de�i�kenin o andaki de�erini ddd
��kt�s� i�erisinde g�rebilirsiniz. Ayr�ca, sa� fare butonuna
t�klarsan�z a�a��daki men� ��kacakt�r:
Bu men� fname isimli de�i�kenin de�erini incelememizi
sa�lar, alttaki pencerede, �izim b�lgesinde bu de�i�kenin
bir i�aretleyici veya ger�ek bir de�i�ken olup olmad���
g�sterilir (i�aretleyici ba�ka bir de�i�kenin bellekteki
adresini saklayan ba�ka bir de�i�kendir). What is b�l�m�
ise se�ilmi� de�i�kenin yap�s�n� veya tipini g�sterir.
Lookup rastlanan benzerlikleri takip etmemizi sa�lar. Son
olarak, Break at ve Clear at b�l�mlerinde k�saca anlataca��m
breakpoint diye deyimlendirilen kullan�mlard�r.
Kaynak kodun alt�ndaki d��melerin bulundu�u barda da
de�i�ik se�enekler mevcuttur, sadece gerekli parametreleri
soldaki bo� kutuya yaz�p gerekli eylemi se�mek yeterlidir.
Bir break-point, program� istedi�iniz sat�r�na kadar
�a�l��t�rman�z� sa�lar; belli bir noktada program�n
�al��mas� durur ve kullan�c� de�i�kenlerin bu noktadaki
de�erlerini izleyebilir. Ayr�ca, bu noktadan sonra
kullan�c� program�n �al��t�r�lmas�n� elle ad�m ad�m
yapt�rabilir, ve a�ama a�ama program� izleyebilir.
Breakpointlerin olmamas� durumunda, program problemsiz
�al���r veya bir hata sonucu �al��amadan sona erer,
bu durumda program� incelemek i�in bir i�lem yapmak i�in
�ok ge�tir. Program �al��t�r�ld��� s�rada hata bulma
i�leminden ge�irilmelidir.
Program�n�za bir breakpoint eklemek i�in a�a��dakileri
yap�n�z:
- Breakpoint koymak istedi�iniz b�l�m�n sol taraf�na
imleci getirip sa� fare butonuna t�klad�ktan sonra Set
Temporary Breakpoint se�ene�ini se�meniz yeterli olacakt�r.
�kisi aras�ndaki fark ge�ici olan breakpointlerin ilk
�al��t�rmadan sonra kaybolmas�d�r. Di�eri ise sadece
do�ru komut verilirse kald�r�labilir (Bu komutu tahmin
edebilir misiniz? :) ).
- Break at isimli butonu kaynak kodu penceresinden
se�erek
- Debugger konsolundan break yazarak
- Men� se�eneklerinden Source->Edit Breakpoints
b�l�m�n� se�erek, bu ayr�ca bu program�n kullan�m� i�in
ayr� bir pencerede a�acakt�r.
Resimde 70 ve 71. sat�rlarda, kaynak kodu i�inde iki
breakpoint g�r�nmektedir. Breakpoint i�in kullan�lan sembol
kendi kendini �ok iyi a��klamaktad�r.
A�a��daki men� breakpointleri kullanmaya yarar:
- Condition se�ene�i ile, ko�ullu breakpointler
yerle�tirilebilir. Bu durumda, program�n breakpoint
sat�r�nda durmas� i�in ko�ulun ger�ekle�mesi gerekir.
Ba�ka bir ko�ul �e�idi ise Ignore Count se�ene�idir.
Bu durumda, ko�ulun do�ru olmas� i�in breakpoint
sat�r�na <n> defa ula��lmas� gerekir.
�rne�in, herhangi bir d�ng�n�n 15. iterasyonundan sonra
program� durdurmak i�in kullan�labilir.
Program herhangi bir breakpointte durdu�unda, gerekli
men�lerin se�eneklerini kullanarak programdaki de�i�kenlerin
de�erlerini inceleyebiliriz. B�t�n bu fonksiyonlar ana men�de
bulunmaktad�r (�rnek; menu Data).
-
Kodun �al��t�r�lmas�n� kontrol etmek amac�yla, bu i� i�in
kullan�lan d��melerin bulundu�u pencereyi kullanaca��z. Bu
pencere ana pencerenin sa� �st k��esinde bulunmaktad�r.
Men� bar ile d��melerin bulundu�u pencere aras�ndaki benzerlik
g�r�lebilir.
Program� �al��t�r�p durdurabiliriz, men� bar�n�n kullan�lmas�
durumunda, dialog penceresini kullanarak programa baz� parametreler
vermek olas�d�r. Step komutu, program� sat�r sat�r �al��t�r�r, bu
durumda, program�n herhangi bir yerinde bir fonksiyon �a��r�l�rsa,
hata bulucu o fonksiyonun ba��na gidecek ve bir sonraki Step
komutunu bekleyecektir. �te yandan, Next komutu ise,
fonksiyonlar� tek sat�r olarak kabul eder ve bu i�lemleri tek
a�amada yapar.
Continue komutu, herhangi bir breakpointte durulduktan
sonra program�n �al��t�r�lmas�na devam edilmesini sa�lar. Kill,
Interrupt, Abort komutlar� ise program�n �al��t�r�lmas�n�
durdurmak i�in kullan�l�r.
Muhtemelen, bu grafik ortam�n en �nemli �zelli�i, pencerenin �st
taraf�nda bulunan bilgi g�steren penceredir. Grafiklerle, bilginin
yap�s�n�, i�eri�ini ve di�er bilgiler ile aras�ndaki ba�lant�lar�
buradan izleyebiliriz. Bir sonraki �rnekte, bir dizi (arg�manlar)
ve o dizinin d�rt eleman� g�r�lmektedir.
Bu pencere, �ok geni� bilgi sunar, Data->More Status
Displays b�l�m�nden yap�labilecek ayarlarla, data penceresinde
g�rmek istedi�iniz her�eyi ayarlayabilirsiniz. Bir �nceki �rnekte,
i�lemcinin kay�t de�erlerini, gerekli dinamik kitapl�klar� ve
program�n �al��ma durumunu g�rebilirdik:
Son S�zler
DDD ortam�, ayn� program kullan�larak, Options->Preferences
men�s�nden ayarlanabilir. Ayr�ca, bu ayarlar Motif programlar�n�n
klasik y�ntemi olan $HOME/.dddinit dosyas�ndan da yap�labilir.
Ayarlanabilecek t�m kaynaklar�n a��klanmas� bu yaz�n�n d���ndad�r.
DDD ile gelen kitap����n (ddd.ps)ve hata bulucunun kitap����n�n
(Debugging with GDB) okunmas� �ok �nemlidir. Yine de, kullan�c�
bunlar� k�sa bir zaman i�inde kendi kendine de ��renebilir.
Yap�lams� gereken sadece iyice tan�d���n�z bir kodu burada hata bulma
i�lemine tabii tutman�zd�r. Bu �ekilde hata bulucunun yapabilecekleri
ortaya ��kacakt�r.
Ve son olarak, yaz�da hatalar yapt�ysam �z�rlerimi sunar�m :)
|
|