2013-07-19 12 views
9

Ich habe gerade mit dem Codieren in C begonnen und das Makefile von jemand anderem mit dem Standardcompiler ausgeführt, der auf gcc gesetzt ist. Ich bin auf Mac OS X 10.8 Mountain Lion und ich glaube, ich habe den Compiler mit "XCode Command Line Tools" installiert. Nach dem Ausführen von "make" auf der Kommandozeile bekomme ich diese lästigen .dSYM-Dateien für jedes Programm. Ich habe gelesen, dass dies Debug-Dateien sind, aber sind sie wirklich notwendig? Gibt es eine Möglichkeit, zu verhindern, dass sie über die Befehlszeile generiert werden?.dSYM-Dateien von der Befehlszeile (Mac) generiert

+1

Überprüfen Sie, ob 'dsymutil' im' Makefile' läuft und kommentieren Sie es. 'gcc' unter OS X sollte diese nicht selbst erzeugen. Das Werkzeug, das es tut, heißt 'dsymutil'. Außerdem: Nein, sie müssen die Binärdatei nicht ausführen und dienen nur zu Debugging-Zwecken. –

+0

Es gibt kein dsymutil im Makefile, aber die folgenden Flags werden ausgeführt: CFLAGS = -m32 -g -Oo -std = gnu99 -Wall – pyrrhic

Antwort

7

Ja, die dSYM-Dateien sind notwendig. Insbesondere enthalten sie die Symboltabellen, die in Xcode-Debug-Builds enthalten sind. Release-Builds fügen die Symbole in diese separate Datei ein. Wenn Sie jemals einen Stack-Trace von einem Release-Build analysieren müssen, benötigen Sie diesen. Und stellen Sie sicher, dass Sie die Dateien nicht verlieren, da das erneute Erstellen, auch wenn die Quelle absolut identisch ist, keine brauchbare dSYM-Datei erzeugt. Jedem Build wird eine UUID zugewiesen, die sich mit jedem Build ändert, auch wenn sich die Quelle nicht geändert hat. (Ich denke, es enthält einen Zeitstempel oder sogar eine Zufallszahl.)

Wenn Sie die dSYM-Dateien wegwerfen, dann wenn Sie plötzlich Ihre App viel Absturz finden, kann es Ihnen leid tun.

0

Sie sind nur erforderlich, wenn Sie Standorte in Stack-Traces in einem Absturzbericht interpretieren müssen.

+1

Sie sind auch nützlich, Quellreferenz in gdb zu haben –

22

Das Flag -g für GCC generiert Debug-Symbole. Sie können diese Flagge einfach von CFLAGS entfernen.