Ben GCC 4.8 ile bir uygulama derlenmiş ve ben sözde desteği eklendi GDB 7.5+ (yok eski sistemde hata ayıklamak çalışıyorum DWARF-4). GDB'nin bu sisteme yükseltilmesi bir seçenek değildir.GCC 4.8 ekler bile bir derleme birimi başlığında sürüm 4 -gdwarf-2
Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module a.out]
ben diğer sorular önerildiği ancak derleyici sürümü ile derleme birimi başlıklarının bir çift ekleme tutar olarak -gdwarf-2 -gstrict-cüce ile derleme çalıştı: GDB aşağıdaki mesajı verir çünkü bunu debug olamaz 4:
/home/MuchToLearn/src> cat main.c
int main(void)
{
return 0;
}
/home/MuchToLearn/src> gcc -gdwarf-2 -gstrict-dwarf main.c
burada bir şey eksik: aşağıdaki gibi minimal bir C programı derlemek eğer
/tmp> readelf --debug-dump=info a.out | grep -A2 'Compilation Unit @'
readelf: Warning: CU at offset 6b contains corrupt or unsupported version number: 4.
readelf: Warning: CU at offset 1eb contains corrupt or unsupported version number: 4.
Compilation Unit @ offset 0x0:
Length: 0x67 (32-bit)
Version: 2
--
Compilation Unit @ offset 0x6b:
Length: 0x84 (32-bit)
Version: 4
--
Compilation Unit @ offset 0xf3:
Length: 0x62 (32-bit)
Version: 2
--
Compilation Unit @ offset 0x159:
Length: 0x8e (32-bit)
Version: 2
--
Compilation Unit @ offset 0x1eb:
Length: 0x136 (32-bit)
Version: 4
--
Compilation Unit @ offset 0x325:
Length: 0x62 (32-bit)
Version: 2
bile gerçekleşir? Sadece DWARF-2'yi destekleyen eski GDB sürümleri tarafından ayıklanabilen ikili dosyalar oluşturmayacaksa, -gdwarf-2 seçeneğinin kullanılmasının amacı nedir?
Düzenleme: istihdam Rus'un yanıt doğrudur. Sürüm-4 derleme birimleri /usr/lib/crt1.o
ve /usr/lib/libc_nonshared.a
'dan geliyordu. Sorunu düzeltmek için onları yerel bir dizine kopyalayıp hata ayıklama sembollerini strip -g
ile kaldırdım.
ld -o main -dynamic-linker /lib/ld-linux.so.2 crt1.o /usr/lib/crti.o main.o /lib/libc.so.6 libc_nonshared.a /usr/lib/crtn.o
elde edilen yürütülebilir herhangi bir sürüm-4 derleme birimlerini ihtiva etmez ve GDB bu şikayet durduruldu aşağıdaki gibidir: Daha sonra, I yürütülebilir bağlı.
Muhtemelen daha yeni bir cüce sürümü ile derlenmiş kütüphaneleri kullanıyor musunuz? Statik olarak bir şey bağlamadığınız sürece sadece bir 'Derleme Birimi' cümleciğine sahip olmalısınız ... – o11c
Glibc gibi gizli bir şey olmadığı sürece, fikirlerim tükendi. Bu, printf() 'işlevini bile kullanmayan sorudaki minimal programla bile oldu. – MuchToLearn