GDB - Hata Ayıklama Programları
Başlarken: Başlatma ve Durdurma
gcc -g myprogram.c
Myprogram.c dosyasını hata ayıklama seçeneği (-g) ile derler. Hala bir a.out alırsınız, ancak ham bellek konumları (eğlenceli değil) yerine GDB içindeki değişkenleri ve işlev adlarını kullanmanıza izin veren hata ayıklama bilgilerini içerir.
gdb a.out
GDB'yi a.out dosyasıyla açar, ancak programı çalıştırmaz. Bir komut istemi (gdb) göreceksiniz - tüm örnekler bu komut istemindendir.
r
r arg1 arg2
r <dosya1
Önceden yüklenmiş "a.out" çalıştırmanın üç yolu. Doğrudan çalıştırabilir (r), argümanlar iletebilir (r arg1 arg2) veya bir dosyada besleyebilirsiniz. Genellikle çalıştırmadan önce kesme noktaları belirlersiniz.
help
h kesme noktaları
Yardım konularını listeler (yardım) veya belirli bir konuda yardım alır (h kesme noktaları). GDB iyi belgelenmiştir.
q - GDB'den çık
Kodda Adım Adım
Stepping, programınızın yolunu izlemenize ve çökmekte olan veya geçersiz girdi döndüren kodu sıfırlamanıza izin verir.
l
l 50
işlevim
Geçerli satır (l), belirli bir satır (l 50) veya bir işlev (işlev) için 10 satır kaynak kodu listeler.
Sonraki
Programı bir sonraki satıra kadar çalıştırır, ardından duraklatır. Mevcut satır bir işlevse, tüm işlevi yürütür ve sonra duraklar.next kodunuzda hızlıca gezinmek için iyidir.
adım
Bir sonraki talimatı çalıştırır, satırı değil. Mevcut talimat bir değişken ayarlıyorsa, aynıdırnext. Bu bir işlevse, işleve atlar, ilk ifadeyi yürütür ve sonra durur.step kodunuzun ayrıntılarına dalmak için iyidir.
bitiş
Mevcut işlevi yürütmeyi bitirir, ardından duraklatır (dışarı çıkma da denir). Yanlışlıkla bir işleve girdiyseniz kullanışlıdır.
Kesme Noktaları veya İzleme Noktaları
Kesme noktaları, hata ayıklamada önemli bir rol oynar. Belirli bir noktaya ulaştığında bir programı duraklatırlar (bozarlar). Değişkenleri inceleyip değiştirebilir ve yürütmeye devam edebilirsiniz. Bu, bazı giriş hataları meydana geldiğinde veya girişler test edilecek olduğunda faydalıdır.
kırılma 45
fonksiyonumu boz
- 45. satırda veya işlevimde bir kesme noktası ayarlar. Kesme noktasına ulaştığında program duraklayacaktır.
x == 3 izle
Bir koşul değiştiğinde (x == 3 değiştiğinde) programı duraklatan bir izleme noktası ayarlar. İzleme noktaları, her işlev çağrısında kırılmak zorunda kalmadan belirli girdiler (myPtr! = NULL) için harikadır .
devam et
Bir kesme noktası / izleme noktası tarafından duraklatıldıktan sonra yürütmeyi sürdürür. Program, bir sonraki kesme noktasına / izleme noktasına ulaşana kadar devam edecektir.
N sil
- N kesme noktasını siler (kesme noktaları, oluşturulduğunda numaralandırılır).
Değişkenleri Ayarlama
Değişkenleri çalışma zamanında görüntülemek ve değiştirmek, hata ayıklamanın kritik bir parçasıdır. Sorunların temel nedenini bulmak için işlevlere geçersiz girdiler sağlamayı veya başka test senaryoları çalıştırmayı deneyin. Tipik olarak, program duraklatıldığında değişkenleri görüntüler / ayarlarsınız.
x yazdır
X değişkeninin mevcut değerini yazdırır. Orijinal değişken isimlerini kullanabilmek (-g) bayrağına neden ihtiyaç duyulduğudur; düzenli olarak derlenen programlar bu bilgileri kaldırır.
x = 3 olarak ayarlayın
x = y olarak ayarla
- X'i bir set değerine (3) veya başka bir değişkene (y) ayarlar
işlevimi çağır ()
myotherfunction (x) çağır
strlen'i ara (mystring)
Kullanıcı tanımlı veya sistem işlevlerini çağırır. Bu son derece kullanışlıdır, ancak buggy işlevlerini çağırmaya dikkat edin.
ekran x
Her adımdan veya duraklamadan sonra gösterilen x değişkeninin değerini sürekli olarak görüntüler. Sürekli olarak belirli bir değeri kontrol ediyorsanız kullanışlıdır.
gösterilmeyen x
- Display komutu tarafından görüntülenen bir değişkenin sabit görüntüsünü kaldırır.
Geri İzleme ve Çerçeveleri Değiştirme
Yığın, geçerli işlev çağrılarının bir listesidir - size programda nerede olduğunuzu gösterir. Bir çerçeve gibi bağımsız değişken olarak tek bir işlev çağrısı detaylarını saklar.
bt
Backtracesveya geçerli programda nerede olduğunuzu göstermek için geçerli işlev yığınını yazdırır. Ana çağrılar, c () çağrısı yapan b () işlevini çağıran a () işlevi ise, geri izleme
c <= current location
b
a
main
up
aşağı
İşlev yığınında bir sonraki kareye yukarı veya aşağı gitme. Eğer içindeysenc, taşınabilirsin b veya a yerel değişkenleri incelemek için.
dönüş
- Geçerli işlevden döner.
Sinyalleri Yönetme
Sinyaller, zamanlayıcı veya hata gibi belirli olaylardan sonra atılan mesajlardır. GDB bir sinyalle karşılaştığında duraklayabilir; bunun yerine onları görmezden gelmek isteyebilirsiniz.
tutamaç [işaret adı] [eylem]
SIGUSR1 nostop işlemek
SIGUSR1 noprint işlemek
işle SIGUSR1 yoksay
GDB'ye belirli bir sinyali (SIGUSR1) oluştuğunda göz ardı etmesini söyleyin. Farklı seviyelerde görmezden gelme vardır.