2010-02-28 11 views
7

Ich schrieb eine LLVM-Transformation, die im Grunde Mallocs durch Art von bewachten Mallocs und einige andere Dinge ersetzt.Warum werden die Debug-Symbole im LLVM-Kompilierungs-/Verbindungsprozess verloren?

Ich benutze clang (oder llvm-gcc) zum Kompilieren einer c-Datei, um eine Bitcodedatei zu erhalten (mit der Option -emit-llvm), die Debug-Informationen enthält. Diese enthalten auch Methodennamen, Zeilennummern und so weiter.

Danach verwende ich opt um diese Bitcode-Datei zu instrumentieren. Das Ergebnis ist eine instrumentierte Bitcode-Datei, die noch alle relevanten Debug-Infos enthält.

In einem dritten und letzten Schritt, da wir einige Laufzeitbibliotheken benötigen, verknüpfen wir den Bitcode mit einigen anderen Bitcodedateien, indem wir llvm-gcc verwenden, um eine endgültige Binärdatei zu erhalten.

Diese Binärdatei kann ich nicht debuggen, da sie keine Debuginformationen enthält, obwohl alle verknüpften Bitcodedateien diese enthalten. Das einzige was gdb mir sagen kann ist in welcher Funktion wir aber keine Zeilennummern sind und so weiter ...

Ich wäre für Hinweise dankbar.

+0

Übergeben Sie -g an alle Schritte, die es akzeptieren? – bmargulies

+0

Vor allem der letzte llvm-gcc-Schritt: Andernfalls wird -g nicht an den Linker übergeben. –

+3

Ja, ich füge die Option -g zu allen Schritten hinzu ... –

Antwort

1

Wie ich verstanden habe, führen Sie Optimierungen (opt-Tool optimiert den Code und Debug-Informationen auch). Kann also der fehlende Teil, den Sie sehen wollen, wenn das Debugging ein Ergebnis optimierter Debug-Informationen ist?

P.S. Ich würde dies in den Kommentar hinzufügen, aber leider habe ich nicht 50 Ruf, die benötigt werden, um einen Kommentar hinzuzufügen.

Verwandte Themen