Ich habe eine Anwendung mit GCC 4.8 kompiliert und ich versuche, sie auf einem älteren System zu debuggen, das nicht GDB 7.5+ hat (das angeblich Unterstützung für DWARF-4 hinzugefügt hat). Das Upgrade von GDB auf diesem System ist keine Option. Ich kann es nicht debuggen, weil GDB die folgende Nachricht ausgibt:
%Vor%Ich habe versucht, mit -gdwarf-2 -gstrict-dwarf zu kompilieren, wie es in anderen Fragen vorgeschlagen wurde, aber der Compiler fügt einige Header der Kompilierungseinheit mit Version 4 ein:
%Vor%Dies passiert auch, wenn Sie ein minimales C-Programm wie folgt kompilieren:
%Vor%Fehle ich hier etwas? Was ist der Sinn der Option -gdwarf-2, wenn keine Binärdateien erzeugt werden, die von älteren GDB-Versionen, die nur DWARF-2 unterstützen, debuggt werden können?
Bearbeiten: Die Antwort von Employee Russian ist korrekt. Die Kompilierungseinheiten der Version 4 stammten von /usr/lib/crt1.o
und /usr/lib/libc_nonshared.a
. Um das Problem zu beheben, habe ich sie in ein lokales Verzeichnis kopiert und ihre Debugsymbole mit strip -g
entfernt. Dann habe ich die ausführbare Datei wie folgt verknüpft:
Die resultierende ausführbare Datei enthält keine Kompilierungseinheiten der Version 4, und GDB hörte auf, sich darüber zu beschweren.
Dies passiert auch, wenn Sie ein minimales C-Programm wie folgt kompilieren:
Sogar dieses minimale Programm wird Teile von libc statisch verbinden (nämlich crt1.o
, crtbegin.o
, etc.).
Sie sollten überprüfen, ob die Kompilierungseinheiten der Version 4 wirklich aus Ihrem Programm kommen und nicht aus einer Bibliothek (schauen Sie sich nur ihre DW_AT_name
und DW_AT_comp_dir
an).
Mein gcc-4.8: gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
erzeugt Version 2, wenn ich es frage:
Wenn die Objekte der Version 4 wirklich nur crt1.o
oder ähnlich sind, beachten Sie, dass Sie strip -g
für diese Objekte sicher ausführen können - Sie werden nicht viel verlieren (es sei denn, Sie müssen libc Startprobleme debuggen, was unwahrscheinlich ist) .