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:
Daha sonra, bir gdb bilgi istemi alırsınız ve çalıştırma komutunu ve Java bağımsız değişkenlerini belirtiniz:export IBM_JVM_DEBUG_PROG=gdb java
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
handle sig32 pass nostop noprint
handle sigusr2 pass nostop noprint
Kod inceleniyor
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 var
komutunu 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.