kgdb programıne kadar kullanışlıbir arayüz sağlasa da yapamayacağıbazıişler vardır. Bunlardan en önemlileri kesme (break point) bırakma ve adım adım işletme özellikleridir.
Çekirdeğiniz üzerinde daha düşük seviyeli bir hata ayıklamaya ihtiyacınız varsa DDB adlıprogram işinizi görecektir. Bu program breakpoint bırakmaya, adım adım işlemeye , çekirdek değişkenlerini değiştirmeye izin verir . Ama çekirdeğin kaynak kodlarına ulaşmaz ve gdb nin sağladığıhata ayıklama bilgilerinin hepsini sağlamaz.Ayrıca sadece static yada global değişkenlerin verilerini değiştirme imkanına sahiptir.
Çekirdeğinizi DDB içerecek şekilde ayarlamak için ayar dosyasına aşağıdakileri eklemelisiniz ve çekirdeği yeniden derlemelisiniz:
options KDB options DDB
(http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/index.html) adresinden çekirdeğin ayarlanmasınıdaha detaylı öğrenebilirsiniz.
Not: Eğer daha eski boot bloklarına sahipseniz hata ayıklama sembolleri tam olarak yüklenmemiş olabilir. Boot bloklarınıgüncellerseniz DDB sembolleri otomatik olarak yüklenecektir.
DDB çekirdeğini çalıştırdıktan sonra buna girmek için çeşitli yöntemler mevcuttur.Birincisi ve eski olanıboot satırında -d seçeneği ile başlatmaktır. Bundan sonra çekirdek hata ayıklama modunda hiç bir aygıt yüklemeden DDB ye girişyapacaktır. İsterseniz probe ve attach fonksiyonlarının da hatalarınıayıklabilirsiniz. FreeBSD-CURRENT kullanıcılarıboot ayarlarına geçmek için menüden 6. seçeneği seçebilirler.
İkinci senaryo ise sistem yüklendikten sonra hata ayıklama programına geçmektir. Bunu gerçekleştirmek için iki basit yöntem vardır. Komut satırından ulaşmak için bu komutu verin:
# sysctl debug.kdb.enter=1
Not : " Kernel panic " anında DDB ye geçmeye zorlamak için şunları yazabilirsiniz:
# sysctl debug.kdb.panic=1
Alternatif olarak eğer sistem konsolundaysanız klavyeden kısayol tuşlarınıkullanabilirsiniz. Standart olarak hata ayıklama programıiçin durdurma CTRL+ ALT + ESC tuşlarıile gerçekleştirilir.Bazısistemlerde sıralamasınıdoğru yapmadığınız takdirde kabul etmeyebilir o yüzden sıralamaya da dikkat ediniz. Seri konsollarda Konsol satırıüzerinden seri olarak gelen BREAK sinyalleri ile DDB ye girmek için bir seçenek mevcuttur (çekirdek ayar dosyasında options BREAK_TO_DEBUGGER seçeneği) ama standart değildir çünkü normal şartlarda bir kablonun çıkarılmasıbile bu sinyalin oluşmasına neden olabilir.
Üçüncü yöntem ise çekirdek ayarlanmışise "Kernel Panic" durumunda direk olarak DDB ye girecektir. Bu yüzden makine gözetim altında olmadan beklenmeyen bir durumda hata ayıklama moduna geçecek şekilde ayarlamak çok büyük bir problem değildir.
Bu fonksiyonelliği kazanmak için aşağıdaki satırlarıçekirdek ayar dosyasında ekleyiniz :
options KDB_UNATTENDED
Sonra çekirdeği tekrar derlemeniz gerekecektir.
DDB komutlarıaşağıyukarıgdb komutlarına benzemektedir.İlk olarak ihtiyacınız olacak şey belki de break point koymaktır.
break function-name address
Sayılar varsayılan olarak 16lıtabanda gösterilecektir ama a-f ile başlayanlarısembol isminden ayırmak için bunları0x ile başlatılır. Basit bir ifade olarak mesela : fonksiyon ismi + 0x103.
Hata ayıklama programından çıkmak ve çekirdeğin çalışmasına devam etmek için şu komut kullanılır :
continue
Yığın içindeki fonksiyon çağrılarınıyani stack trace' i görmek için gereken komut:
trace
Not: Eğer DDB ye kısayol tuşları ile geçişyapıyorsanız çekirdek bir kesme oluşturacak sonuç olarak 'stack trace' tam manasıile işe yaramayacaktır.
Eğer bir breakpoint'i silmek istiyorsanız bu komutu kullanınız :
del del (adres ifadesi)
İlk olan breakpoint'e geldikten sonra direk olarak kabul edilecek ve geçerli breakpointi silecektir. İkinci ifade ise bütün breakpointleri silebilir ama tam adresinin verilmesi gereklidir.Bu breakpointlerin yerlerini öğrenmek için :
show b show break
komutlarınıkullanabilirsiniz.Hata ayıklama modunda bir adım ilerlemek için :
s
komutu kullanılabilir. Ama bu komut fonksiyonların içine girecektir . Eğer fonksiyonların sonuna kadar ulaşılmak istenirse :
n
komutu kullanılır.
Not: Bu komut gdb'nin
next
komutundan farklıdır ;daha çokfinishkomutuna benzer.Birden fazla
nkomutu göndermek
continue
işlemi gibi algılanacaktır.Hafızadaki veriler incelenmek istenirse , aşağıdaki örnekler gibi kullanılabilir :
x/wx 0xf0133fe0,40 x/hd db_symtab_space x/bc termbuf,10 x/s stringbuf
word/halfword/byte şeklinde ulaşımlar hexadecimal/decimal/character/ gösterimler / karekterinden sonra belirtilmiştir. Virgülden sonra gelen değer kaç tane objeye erişilmek istendiğidir. Sonraki 0x10 elamanıgöstermek için basitçe :
x ,10
yazabilirsiniz .Benzer şekilde :
x/ia foofunc,10
foofunc fonksiyonundan sonra gelen 0x10 komutu görebilirsiniz.Bunlarıofsetleri ile beraber görmek isterseniz :
w/b termbuf 0xa 0xb 0
w/w 0xf0010030 0 0
/ karakterinden sonraki harfler bit , half byte yada word mu yazılacağınıbelirler. Bundan sonra gelen ilk ifade yazılacak adresi belirtir.Geri kalan ise bu adrese yazılacak veridir.
Eğer yazmaçlara ulaşmak isterseniz :
show reg
Yada alternatif olarak tekbir yazmacıgörüntülemek için :
p $eax
yazmaçların içeriğini değiştirmek için :
set $eax new-value
Eğer bazıçekirdek fonksiyonlarına ihtiyacınız olursa :
call func(arg1, arg2, ...)
yazabilirsiniz . Fonksiyonlar bitirilince dönüşdeğerlerini yazdıracaktır.Şu anda çalışan süreçlere ulaşmak isterseniz :
ps
Diyelim ki problemi çözdünüz ve çekirdeğin neden hata verdiğini anladınız ve artık yeniden başlatmak istiyorsunuz. Fakat unutmayın ki önceki hatanın ciddiyetine bağlıolarak çekirdeğin bütün kısımları çalışmayabilir.Sisteminizi tekrar başlatmak için şunu yazın :
panic
Böylece çekirdek bir döküm oluşturarak yeniden başlatılacaktır.Bu dökümü daha sonralarıgdb ile inceleyebilirsiniz.
call boot(0)
Komutu çalışan bir sistemi temizlemek ,kapatmak,yeniden başlatmak ve disklere sync() komutu göndermek için en iyi yöntemdir. Eğer çekirdeğin dosya sistemi arayüzü bozulmadıise temiz bir kapanışiçin en iyi yoldur.
call cpu_reset()
Tehlike anında basılacak kırmızıdüğme vazifesi görür.
help
Yardım komutudur.
Bir de hata ayıklama işlemine başlamadan önce ddb(4) programının kullanım klavuzunun çıktısınıyanınızda bulundurmanız tavsiye edilir.Çünkü çekirdeği incelerken bilgisayardan döküman okumanız oldukça zor olacaktır.