GNU Hata Ayıklayıcı - GNU Debugger - Wikipedia

GNU Hata Ayıklayıcı
Gdb okçu fish.svg
GDB-screenshot.gif
Geliştirici (ler)GNU Projesi
İlk sürüm1986; 34 yıl önce (1986)
Kararlı sürüm
10.1[1] / 24 Ekim 2020; 45 gün önce (2020-10-24)
Depo Bunu Vikiveri'de düzenleyin
YazılmışC
İşletim sistemiUnix benzeri, pencereler
TürHata ayıklayıcı
LisansGPLv3
İnternet sitesiwww.gnu.org/yazılım/ gdb

GNU Hata Ayıklayıcı (GDB) bir taşınabilir hata ayıklayıcı birçok yerde çalışır Unix benzeri sistemler ve çoğu için çalışır Programlama dilleri, dahil olmak üzere Ada, C, C ++, Amaç-C, Ücretsiz Pascal, Fortran, Git,[2] ve kısmen diğerleri.[3]

Tarih

GDB ilk olarak tarafından yazılmıştır Richard Stallman 1986'da onun bir parçası olarak GNU sistemi, onun ardından GNU Emacs "oldukça istikrarlı" idi.[4] GDB ücretsiz yazılım altında yayınlandı GNU Genel Kamu Lisansı (GPL). Sonrasında modellenmiştir. DBX ile gelen hata ayıklayıcı Berkeley Unix dağılımlar.[4]

1990'dan 1993'e kadar John Gilmore.[5] Şimdi, yönetim kurulu tarafından atanan GDB Yürütme Komitesi tarafından sürdürülmektedir. Özgür Yazılım Vakfı.[6]

Teknik detaylar

Özellikleri

GDB, aşağıdakilerin yürütülmesini izlemek ve değiştirmek için kapsamlı olanaklar sunar bilgisayar programları. Kullanıcı, programların dahili değerlerini izleyebilir ve değiştirebilir. değişkenler ve hatta ara fonksiyonlar programın normal davranışından bağımsız olarak.

GDB hedef işlemcileri (2003 itibariyle) şunları içerir: Alfa, KOL, AVR, H8 / 300, Altera Nios / Nios II, Sistem / 370, Sistem 390, X86 ve 64 bit uzantısı X86-64, IA-64 "Itanium", Motorola 68000, MIPS, PA-RISC, PowerPC, SuperH, SPARC, ve VAX. Standart sürümde desteklenen daha az bilinen hedef işlemciler şunları içerir: A29K, ARC, ETRAX CRIS, D10V, D30V, FR-30, FR-V, Intel i960, 68HC11, Motorola 88000, MCORE, MN10200, MN10300, NS32K, Fırtınalı16, ve Z8000. (Daha yeni sürümler büyük olasılıkla bunlardan bazılarını desteklemeyecektir.) GDB derledi simülatörler gibi daha az bilinen hedef işlemciler için M32R veya V850.[7]

GDB hala aktif olarak geliştirilmektedir. 7.0 sürümünden itibaren yeni özellikler şunları içerir: Python komut dosyası oluşturma[8] ve 7.8 sürümünden itibaren GNU Guile komut dosyası da.[9] 7.0 sürümünden bu yana, "tersine çevrilebilir hata ayıklama" desteği mevcuttur - bir hata ayıklama oturumunun, ne olduğunu görmek için çökmüş bir programı geri sarmak gibi, geri adım atmasına izin verir.[10]

Uzaktan hata ayıklama

GDB, gömülü sistemlerde hata ayıklarken sıklıkla kullanılan bir "uzak" mod sunar. Uzaktan işlem, GDB'nin bir makinede çalıştırılması ve hata ayıklanan programın başka bir makinede çalışmasıdır. GDB, bir seri cihaz veya TCP / IP aracılığıyla GDB protokolünü anlayan uzak "saplama" ile iletişim kurabilir.[11] İletişim protokolünün hedef tarafını uygulayan GDB ile sağlanan uygun saplama dosyalarına bağlanarak bir saplama programı oluşturulabilir.[12] Alternatif olarak, gdbserver herhangi bir şekilde değiştirmeye gerek kalmadan programda uzaktan hata ayıklamak için kullanılabilir.

Aynı mod aşağıdakiler tarafından da kullanılmaktadır: KGDB bir koşuda hata ayıklamak için Linux çekirdeği gdb ile kaynak düzeyinde. KGDB ile çekirdek geliştiricileri, uygulama programlarında hata ayıkladıkları gibi bir çekirdekte de hata ayıklayabilirler. Çekirdek koduna kesme noktaları yerleştirmeyi, kodda ilerlemeyi ve değişkenleri gözlemlemeyi mümkün kılar. Donanım hata ayıklama kayıtlarının mevcut olduğu mimarilerde, belirtilen bellek adresleri yürütüldüğünde veya bunlara erişildiğinde kesme noktalarını tetikleyen izleme noktaları ayarlanabilir. KGDB, makineye bağlı ek bir makinenin bir seri kablo veya Ethernet. Açık FreeBSD kullanarak hata ayıklamak da mümkündür FireWire Doğrudan bellek erişimi (DMA).[13]

Grafiksel kullanıcı arayüzü

Hata ayıklayıcı kendi grafiksel kullanıcı arayüzü ve varsayılan olarak bir komut satırı arayüzü İçermesine rağmen metin kullanıcı arayüzü. Bunun için birkaç ön uç oluşturuldu, örneğin UltraGDB, Xxgdb, Veri Görüntüleme Hata Ayıklayıcısı (DDD), Nemiver, KDbg, Xcode hata ayıklayıcı, GDBtk / Insight ve HP Wildebeest Hata Ayıklayıcı GUI (WDB GUI). IDE'ler gibi Kodelit, Kod :: Bloklar, Dev-C ++, Geany, GNAT Programlama Stüdyosu (KÜRESEL KONUMLAMA SİSTEMİ), KDevelop, Qt Oluşturucu, Lazarus, MonoDevelop, Tutulma, NetBeans, ve Görsel stüdyo GDB ile arayüz oluşturabilir. GNU Emacs bir "GUD moduna" ve VIM var (örneğin yarık). Bunlar, IDE'lerde bulunan hata ayıklayıcılara benzer tesisler sunar.

Diğer bazı hata ayıklama araçları, GDB ile çalışmak üzere tasarlanmıştır. Örneğin: bellek sızıntısı dedektörler.

Komut örnekleri

gdb programı"Program" hatalarını ayıklayın (kabuktan)
çalıştır -vYüklenen programı parametrelerle çalıştırın
bt Geri izleme (programın çökmesi durumunda)
bilgi kayıtlarıTüm kayıtları boşalt
disas $ pc-32, $ pc + 32Sökmek

Örnek bir oturum

Şu dilde yazılmış kaynak kodunu düşünün C:

#Dahil etmek <stdio.h>#Dahil etmek <stdlib.h>#Dahil etmek <string.h>size_t foo_len( sabit kömür *s ){  dönüş gergin( s );}int ana( int argc, kömür *argv[] ){  sabit kömür *a = BOŞ;  printf( "a =% lu boyut n", foo_len(a) );  çıkış( 0 );}

Kullanmak GCC derleyici Linux, yukarıdaki kod kullanılarak derlenmelidir -g Oluşturulan ikili dosyaya uygun hata ayıklama bilgilerini dahil etmek için işaretleyin, böylece GDB kullanarak incelemeyi mümkün kılar. Yukarıdaki kodu içeren dosyanın adlandırıldığını varsayarsak example.ciçin komut derleme olabilirdi:

$ gcc example.c -Og -g -o örneği

Ve ikili artık çalıştırılabilir:

$ ./misalSegmentasyon hatası

Örnek kod çalıştırıldığında, bir Segmentasyon hatası Sorunu incelemek için GDB kullanılabilir.

$ gdb ./exampleGNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16)Telif Hakkı (C) 2011 Free Software Foundation, Inc.Lisans GPLv3 +: GNU GPL sürüm 3 veya üzeri Bu ücretsiz bir yazılımdır: onu değiştirmekte ve yeniden dağıtmakta özgürsünüz.Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR. "Kopyalamayı göster" yazınve ayrıntılar için "garantiyi göster".Bu GDB "x86_64-redhat-linux-gnu" olarak yapılandırıldı.Hata raporlama talimatları için lütfen şu adrese bakın: .../Path/example...done'dan semboller okunuyor.(gdb) koşmakBaşlangıç ​​programı: / yol / örnekProgram alınan sinyal SIGSEGV, Segmentasyon hatası.0x0000000000400527, foo_len (s = 0x0), example.c: 8'de8 strlen (ler) i dönüş;(gdb) baskı s$1 = 0x0

Sorun 8. satırda mevcut ve işlev çağrılırken ortaya çıkıyor gergin (çünkü argümanı, s, dır-dir BOŞ). Strlen uygulamasına bağlı olarak (Çizgide veya değil), çıktı farklı olabilir, örneğin:

GNU gdb (GDB) 7.3.1Telif Hakkı (C) 2011 Free Software Foundation, Inc.Lisans GPLv3 +: GNU GPL sürüm 3 veya üzeri Bu ücretsiz bir yazılımdır: onu değiştirmekte ve yeniden dağıtmakta özgürsünüz.Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR. "Kopyalamayı göster" yazınve ayrıntılar için "garantiyi göster".Bu GDB, "i686-pc-linux-gnu" olarak yapılandırıldı.Hata raporlama talimatları için lütfen şu adrese bakın: .../Tmp/gdb/example...done'dan semboller okunuyor.(gdb) koşmakBaşlangıç ​​programı: / tmp / gdb / exampleProgram alınan sinyal SIGSEGV, Segmentasyon hatası./Lib/i686/cmov/libc.so.6'dan strlen () içinde 0xb7ee94f3(gdb) bt#0  0xb7ee94f3 strlen içinde () /lib/i686/cmov/libc.so.6 adresinden#1  0x08048435 foo_len içinde (s=0x0) ornek.c: 8#2  0x0804845a ana olarak (argc=, argv=<optimized out>) ornek.c: 16'da

Sorunu çözmek için değişken a (işlevde ana) geçerli bir dize içermelidir. İşte kodun sabit bir sürümü:

#Dahil etmek <stdio.h>#Dahil etmek <stdlib.h>#Dahil etmek <string.h>size_t foo_len( sabit kömür *s ){  dönüş gergin(s);}int ana( int argc, kömür *argv[] ){  sabit kömür *a = "Bu bir test dizesidir";  printf( "a =% lu boyut n", foo_len(a) );  çıkış( 0 );}

Yürütülebilir dosyayı GDB içinde yeniden derlemek ve çalıştırmak artık doğru bir sonuç veriyor:

GDB, printf ekrana gelir ve ardından kullanıcıya programın normal şekilde çıktığını bildirir.

Ayrıca bakınız

Referanslar

  1. ^ Brobecker, Joel (2020-10-24). "GDB 10.1 yayınlandı!". Alındı 2020-10-24.
  2. ^ "GDB Belgeleri - Desteklenen Diller". Alındı 2011-11-28.
  3. ^ "GDB Belgeleri - Özet". Alındı 2011-11-28.
  4. ^ a b "İsveç Kraliyet Teknoloji Enstitüsü'nde Richard Stallman konferansı (1986-10-30)". Alındı 2006-09-21. Sonra GNU Emacs, yaklaşık bir buçuk yıl süren makul ölçüde kararlı olduktan sonra, sistemin diğer bölümlerine geri dönmeye başladım. Son zamanlarda dağıtıma giren C kodu için sembolik bir hata ayıklayıcı olan GDB adını verdiğim bir hata ayıklayıcı geliştirdim. Şimdi bu hata ayıklayıcı, büyük ölçüde Berkeley Unix ile birlikte gelen bir hata ayıklayıcı olan DBX ruhuna uygun.
  5. ^ "John Gilmore (aktivist)". hyperleap.com.
  6. ^ "GDB Yürütme Kurulu". Alındı 2008-05-11.
  7. ^ "GDB Belgeleri - Özet - Katkıda Bulunanlar". Alındı 2011-12-01.
  8. ^ "GDB 7.0 Sürüm Notları". Alındı 2011-11-28.
  9. ^ Joel Brobecker (2014-07-29). "GDB 7.8 yayınlandı!". Alındı 2014-07-30.
  10. ^ "GDB ile Ters Hata Ayıklama". Alındı 2014-01-20.
  11. ^ "Nasıl Yapılır: GDB Uzak Seri Protokolü: RSP Sunucusu Yazma" (PDF).
  12. ^ "Uzak saplama uygulama".
  13. ^ "Dcons ile çekirdek hata ayıklaması".

Dış bağlantılar

Dokümantasyon

Öğreticiler