CMake speichert abgestreifte Debug-Informationen

8

Es ist üblich, mit Debug-Symbolen zu kompilieren und dann die Binärdatei mithilfe von objcopy in die ausführbare Version und die Datei mit Debug-Informationen zu trennen (dann in separate Pakete zu verpacken oder auf dem Symbolserver zu speichern).

Wie man Debug-Symbole in CMake richtig trennt? Ich habe nur einige Diskussionen und unvollständige Code-Beispiele gesehen.

Plattform ist Linux und GCC.

    
Velkan 30.09.2015, 08:34
quelle

1 Antwort

2

CMake hat keine direkte Unterstützung dafür, aber Sie können einige POST_BUILD- und INSTALL-Schritte verwenden, um das gewünschte Ergebnis zu erzielen. Es ist jedoch erwähnenswert, dass die Verwendung von objcopy nicht der einzige Weg ist, um so etwas zu tun. Sie können auch die Build-ID verwenden und dies ist möglicherweise einfacher mit CMake zu implementieren.

Anstatt das Ganze hier zu wiederholen, gibt es eine ziemlich gute Beschreibung Ihrer Wahlmöglichkeiten und der Methoden das wurde vor ein paar Jahren von Michael Hertling auf die CMake Mailingliste gepostet. Ich werde nur die Arbeitsalternative hier als Referenz auswählen, aber ich empfehle diesen Link zu lesen. Es gibt auch noch eine komplette Diskussion der beiden Alternativen in der GDB-Dokumentation, die gefüllt werden sollte in jedem verbleibenden Leerzeichen über die beiden Ansätze (Debug-Link versus Build-ID). Hier ist Michaels allgemeiner Build-ID-Ansatz (die Build-ID ist explizit in seinem Beispiel angegeben, lesen Sie die referenzierten Artikel für eine Erklärung dessen, was es zu repräsentieren erwartet):

%Vor%
  

Konfigurieren mit CMAKE_BUILD_TYPE == debug and build; Rufen Sie anschließend

auf      

gdb -ex "set debug-file-directory" -ex "Datei Haupt"

     

aus CMAKE_BINARY_DIR, und Sie werden lesen "keine Debugging-Symbole   gefunden "wie erwartet. Jetzt, Problem" make install ", gdb erneut aufrufen und lesen:

     

"Symbole lesen von ... /. build-id / ab / cdef1234.debug"

     

Wie Sie sehen können, ist die Debug-Infodatei mit dem Striped verbunden   ausführbar ausschließlich von der Build-ID; keine Objkopie in Sicht.

Das obige macht Gebrauch von der Tatsache, dass die Datei .debug voraussichtlich eine normale ausführbare Datei ist, wobei die Debug-Informationen nicht entfernt werden.

    
Craig Scott 23.11.2015, 20:59
quelle

Tags und Links