web-gelistirme-sc.com

Cüce Hatası: Derleme ünitesi başlığında yanlış sürüm (4, 2 olmalı)

RedHat Linux'ta paylaşılan bir nesne oluşturuldu ve tüm kodlar hata ayıklama ile derlenirken, hata ayıklayıcı (gdb) simgeleri yüklemeyi reddetti ve aşağıdaki gibi bir hata verdi:

...
GNU gdb   Fedora (6.8-37.el5) 
...
This GDB was configured as "x86_64-redhat-linux-gnu"...
Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module libgrokf.so]

Bu hata ile hiçbir fonksiyonda tetiklenecek kırılma noktaları elde edemedim ya da uygun yığın izini göremedim. Tüm projeyi yeniden derledim ama hiçbir şey yardımcı olmadı. Geçmişte bir süre bu modül hata ayıklama hiçbir sorun olmadığını biliyorum.

Bu soruna ne sebep oluyor?

20
Dror Harari

Sorun, gdb sürümünüzün, ikili dosyalarınızdan birinde kullanılan DWARF sürümünü desteklememesidir.

Çözüm: gdb dosyasını güncelleyin veya dosyalarınızı başka bir hata ayıklama biçimi kullanarak derleyin (DWARF2gdb 6'da çalışır).

Yakın zamanda bu sorunu freeBSD ve nasm, nasmDWARF3 ile birlikte ikili dosyaları derlerken ve freeBSD 9.1 ile birlikte gelen gdb ile karşılaştırarak bunu kabul etmedim.

Umarım bu cevap benzer bir sorunu olan herkese yardımcı olur: P

GCC için hata ayıklama seçenekleri

14
Marco

Olduğu gibi, hata ayıklamayan modül çoğunlukla bir üçüncü taraf tarafından sağlanan someextcode.o adlı küçük bir 'harici' nesne dosyası dışındaki kaynaklardan yapıldı.

Sorunun araştırılmasında someextcode.c'nin derleme ünitesi başlığında 4'ün DWARF versiyonunu yerleştirdiği -g3 bayrağıyla derlendiği bulundu. Bunu -g olarak değiştirmek sorunu çözdü.

Ne yazık ki, tek bir modülle ilgili bir problem, sorunun kökünü açıkça belirtmeden tüm paylaşılan bir nesnenin (.so) hata ayıklama yeteneğini kırabilir.

14
Dror Harari

Sorunum hata ayıklama için doğru gdb sürümünü seçerek çözüldü. Daha önce gdb 7.0 kullanıyordum ... ve gdb 7.10 sürümünü kullanmaya başladığımda uygulamamda hata ayıklamayı başardım.

0
Kapil Satija