gdbile hata ayıklanması

GNU hata ayıklayıcısı (gdb), bir programın çökme anında ne yaptığını görmek için, program yürütülürken ya da geriye dönük olarak başka bir programın dahillerini incelemenize olanak tanır.

gdb , kodun yürütülmesini incelemenize ve denetlemenize olanak tanır ve çökme ya da genel yanlış davranışların nedenlerini değerlendirmek için yararlı olur. gdb , Java™ işlemlerini işlemez, bu nedenle saf bir Java programı ile sınırlı kullanım için kullanılır. Yerel kitaplıklarda ve JVM ' nin kendisinde hata ayıklanması yararlı olur.

Çalışıyor gdb

gdb ' ı üç şekilde çalıştırabilirsiniz:

Program başlatma
Genellikle komut: gdb <application> , gdbdenetimi altında bir program başlatmak için kullanılır. Ancak, Java başlatıldığı için, bir ortam değişkeni ayarlayarak ve Java 'yı çağırarak gdb ' u başlatmalısınız:
export IBM_JVM_DEBUG_PROG=gdb
java
Daha sonra, bir gdb bilgi istemi alırsınız ve çalıştırma komutunu ve Java bağımsız değişkenlerini belirtiniz:
r <java_arguments>
Çalışmakta olan bir programa bağlanma
Çalışmakta olan bir Java programı varsa, gdbaltında denetimi de denetleyebilirsiniz. Çalışmakta olan programın işlem tanıtıcısı gereklidir ve gdb , Java uygulamasıyla ilk bağımsız değişken olarak ve ikinci bağımsız değişken olarak işlem tanıtıcısı olarak başlatılır:
gdb <Java Executable> <PID>

gdb çalışan bir programa bağlandığında, bu program durdurulur ve koddaki konumu görüntüleyiciye ilişkin olarak görüntülenir. Daha sonra, program gdb denetimin altında ve değişkenleri ayarlamak ve görüntülemek için komutları yayınlamaya başlayabilirsiniz ve genellikle kodun yürütülmesini denetleyebilirsiniz.

Sistem dökümündeki (corefile) Çalıştırılıyor
Sistem dökümü genellikle, bir program çökmesi sırasında üretilir. gdb , bu sistem döküminde çalıştırılabilir. Sistem dökümü, çökme gerçekleştiğinde programın durumunu içerir. Tüm değişkenlerin değerlerini incelemek ve bir kazaya kadar baştaki kayıtları incelemek için gdb seçeneğini kullanın. Bu bilgiler, kazaya neyin neden olduğunu keşfetmenize yardımcı olur. Bir sistem dökümünün hatalarını ayıklamak için, ilk bağımsız değişken olarak Java uygulama kütüğüyle gdb ve ikinci bağımsız değişken olarak sistem dökümü adını başlatın:
gdb <Java Executable> <system dump>

gdb ' u bir sistem dökümüne karşı çalıştırdığınızda, ilk olarak, programın aldığı sonlandırma sinyali, o sırada yürütülen işlev ve hatta hatayı oluşturan kod satırı gibi bilgileri gösterir.

Bir program gdbdenetimi altına geldiğinde, bir hoş geldiniz iletisi ve ardından bir bilgi istemi (gdb) görüntülenir. Program, yönergeler girmenizi bekliyor. Her yönerge için, program hangi şekilde seçerse sürmeye devam eder.

Kesme noktalarını ve gözleme noktalarını ayarlama

Kesme noktaları, komut kullanılarak belirli bir satır ya da işlev için ayarlanabilir:

break linenumber

ya da

break functionName

Bir kesme noktası ayarladıktan sonra, programın yürütülmesine izin vermek için continue komutunu kullanın; bu işlem bir kesme noktasına ulaşıncaya kadar devam eder.

Programın yalnızca belirtilen koşula ulaşıldığında halleri olması için koşullu bilgileri kullanarak kesme noktalarını ayarlayın. Örneğin, breakpoint 39 if var == value kullanılması programın 39. satıra erişirken durmasına neden olur; ancak, değişken belirtilen değere eşitse, bu program durdurulmasına neden olur.

Burada: 'un yanı sıra Ne zaman ' un da belirli bir değer haline geldiğini bilmek istiyorsanız, bir gözleme noktası kullanabilirsiniz. Söz konusu değişken kapsam içinde olduğunda gözleme noktasını ayarlayın. Bunu yaptıktan sonra, bu değişken belirtilen değere eriştiğinde size uyarı verilecektir. Komutun sözdizimi şöyledir: watch var == value.

Hangi kesme noktalarının ve gözleme noktalarının belirlendiğini görmek için info komutunu kullanın:

info break
info watch
gdb bir kesme noktasına ya da gözleme noktasına ulaştığında, yürütme için sonraki ayarın kodu satırını yazdırır. 8. satırdaki bir kesme noktasının ayarlanması, 7. satır yürütülmesini tamamladıktan sonra, 8. satır yürütülmeden önce programın durmasına neden olur. kırılma noktaları ve gözleme noktaları kadar, program belli sistem sinyallerini aldığında da halloluyor. Aşağıdaki komutları kullanarak, bu sistem sinyallerini her aldığında hata ayıklama aracını durdururarak durdurabilirsiniz:
handle sig32 pass nostop noprint 
handle sigusr2 pass nostop noprint 

Kod inceleniyor

Kodun doğru konumuna ulaşıldığında, kodu incelemek için bir dizi yol vardır. The most useful is backtrace (abbreviated to bt), which shows the call stack. Çağrı yığını, işlev çerçevelerinin toplamsıdır; burada her işlev çerçevesi, işlev değiştirgeleri ve yerel değişkenler gibi bilgileri içerir. Bu işlev çerçeveleri, çağrı yığınına, yürütüldükleri sırayla yerleştirilir. Bu, en son çağrılan işlevin çağrı yığınının üst kısmında görüntüleneceği anlamına gelir. Çağrı yığınını inceleyerek bir programın yürütülmesinin izini takip edebilirsiniz. Çağrı yığını görüntülendiğinde, satırın başlangıcındaki bir çerçeve numarasını gösterir; ardından, çağıran işlevin adresini ve ardından işlev için kaynak dosya ve işlev için kaynak dosya izler. Örneğin:
#6 0x804c4d8 in myFunction () at myApplication.c

To view more detailed information about a function frame, use the frame command along with a parameter specifying the frame number. Bir çerçeve seçtikten sonra, değişkenleri print varkomutunu kullanarak görüntüleyebilirsiniz.

Bir değişkenin değerini değiştirmek için print komutunu kullanın; örneğin, print var = newValue.

info locals komutu, seçilen işlevdeki tüm yerel değişkenlerin değerlerini görüntüler.

Programınızın yürütülme sırasını tam olarak izlemek için, step ve next komutlarını kullanın. Her iki komut da, yürütülecek satır sayısını belirten isteğe bağlı bir parametre alır. Ancak next , işlev çağrılarını tek bir yürütme satırı olarak kabul eder, step ise çağrılan işlevin her satırında bir adım ilerlerken bir adım ilerler.

Yararlı komutlar

Kodunuzda hata ayıklamayı bitirdiğinizde, run komutu programın bitiş noktasına ya da çökme noktasına kadar çalışmasına neden olur. quit komutu, gdb' den çıkmak için kullanılır.

Diğer yararlı komutlar şunlardır:

ptype
Değişken veri tipini yazdırır.
info share
Yüklü olan paylaşılan kitaplıkların adlarını yazdırır.
info functions
Tüm işlev prototiplerini yazdırır.
list
Geçerli satırın çevresindeki 10 satır kaynak kodunu gösterir.
help
Her biri üzerinde bu konuda ayrıntılı yardım görüntülenmesi için yardım komutunun çağrılmasına sahip olan konuların listesini görüntüler.