GCC 4.8 fügt Version 4 in einen Kompilierungskopf ein, selbst wenn -gdwarf-2

9

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:

%Vor%

Die resultierende ausführbare Datei enthält keine Kompilierungseinheiten der Version 4, und GDB hörte auf, sich darüber zu beschweren.

    
MuchToLearn 12.08.2015, 21:04
quelle

1 Antwort

4
  

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:

%Vor%

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) .

    
Employed Russian 15.08.2015, 03:38
quelle

Tags und Links