Linux'ta GNU Hata Ayıklayıcı Nasıl Kullanılır

GNU Hata Ayıklayıcı, bir programda hata ayıklamak, çökmeyi analiz etmek veya programın belirli bir noktada ne yaptığını görmek için kullanılır. 1980'lerde GNU Projesi tarafından geliştirildi ve en yaygın kullanılan komut satırı hata ayıklayıcılarından biri ve en popüler GNU yazılımlarından biri oldu.

Önce küçük bir C programı yazalım ve sonra hata ayıklayalım. Başlamak için yeni bir .C kullanarak dosya vim veya seçtiğiniz herhangi bir editör:

vim testi.c

Aşağıdaki C programını oluşturun:

#include int ana() { int ben = 5; kayan nokta f = 5.5 ben = ben + 3; f = f + 2.2; printf("i ve f'nin değeri: %d ve %f\n", i, f); 0 döndür; }

basmak Kaçmak vim komut moduna gitmek için. Sonra yazın :wq programı kaydedip çıkmak için

Derleyin ve programın çalışıp çalışmadığını görün:

gcc test.c -o test ./test i ve f değerleri: 8 ve 7.700000

Bir programda hata ayıklama desteğini etkinleştirmek için, ile derliyoruz -G bayrak. Bayrak kullanılmazsa, kullanıcı sınırlı seçeneklerle de olsa programda hata ayıklayabilir.

gcc testi.c -g -o testi

Hata ayıklamaya başlamak için yürütülebilir dosyamız Ölçek içinde gdb, koşuyoruz:

gdb testi

o açacak gdb yazabileceğiniz konsol gdb komutlar. Komutların listesini görmek için Yardım Edin emretmek.

$(gdb) help Komut sınıflarının listesi: takma adlar -- Diğer komutların takma adları kesme noktaları -- Programın belirli noktalarda durmasını sağlama verileri -- Veri dosyalarını inceleme -- Dosyaların içindekileri belirleme ve inceleme -- Bakım komutları belirsiz -- Çalışmayan belirsiz özellikler -- Program yığınını çalıştırma -- Yığın durumunu inceleme -- Durum sorgulama desteği -- Destek tesisleri izleme noktaları -- Programı durdurmadan program yürütme izleme kullanıcı tanımlı -- Kullanıcı tanımlı komutlar "help" yazın ve ardından bir sınıf adı yazın o sınıftaki komutların bir listesi için. Tüm komutların listesi için "help all" yazın. Tam belgeler için "yardım" ve ardından komut adını yazın. "Word" ile ilgili komutları aramak için "apropos word" yazın. Belirsiz olması durumunda komut adı kısaltmalarına izin verilir.

sonra yazabilirsiniz yardım sınıfı_adı o sınıfa ait komutları görmek için. Bir alt dize kullanarak komutları aramak için şunu kullanın: uygun alt dize.

Program bir fonksiyona girdiğinde bir kesme noktası ayarlamak için, Çalıştırmak:

$(gdb) ana ara

Burada kodumuzdaki tek fonksiyonda bir kesme noktası belirledik, yani. ana. komutu kullanın Çalıştırmak programı bir sonraki kesme noktasına kadar veya çıkışa kadar yürütmek için.

$(gdb) çalıştır

Bir işlevde belirli bir konumda bir kesme noktası ayarlamak için, kullanmak:

ara * ana + 4

Bu, main fonksiyonunun 4. satırında bir kesme noktası oluşturacaktır.

Şimdi, program akışını bir sonraki kod satırına geçmek için, basitçe çalıştırın adım emretmek.

$(gdb) 5. adım: kayan nokta f = 5.5;

Bir değişkenin içeriğini görüntülemek için, Çalıştırmak Görüntüle .

$(gdb) i 6'yı göster: i = 5

Bir değişkenin içeriğini değiştirmek için, bir değişkenin belirli değerleri altında bir programın çalışmasını analiz etmek için gerekli olabilecek, değişken ayarla =İfade.

$(gdb) set değişkeni i=10 $(gdb) i gösterimi 7: i = 10

Burada 'İfade' herhangi bir geçerli (aritmetik/mantıksal) ifade olabilir. Basitlik adına, değişkene başka bir değer (10) atadık. Bence.

Programın montaj kodunu yazdırmak için, komutu kullan işlev adını sök:

Sadece kullanın sökmek tüm program için montaj kodunu yazdırmak için. Montaj kodunda belirli bir satırdaki oku not edin. Hata ayıklama oturumunun o anda o belirli bellek konumunda (yani, o kod satırında) duraklatıldığını belirtir.

Hata ayıklayıcıyı belirli bir kod satırında atlamak için, Çalıştırmak:

$(gdb) jump *main + 2 0x400528'de devam ediyor. Kesme noktası 2, 0x000000000040052a test.c:3'te main ()'de 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

Bu, hata ayıklayıcının işlevdeki 2. kod satırının bellek konumuna atlamasını sağlar. ana. Burada ana konumdan doğrudan ikinci konuma atladığımı unutmayın. Bu nedenle, değişken Bence hiçbir zaman ayarlanmadı, bu da hata ayıklayıcının değişken adresindeki bellek içeriğine erişemediğine dair hata atmasıyla sonuçlanır. Bence.

Bunlar, Linux'ta yürütülebilir bir dosyada hata ayıklamaya başlamanıza yardımcı olabilecek bazı temel komutlardır. Bu sayfadaki bilgileri yararlı bulacağınızı umuyoruz.