2011-01-14 6 views
11

Hat jemand Erfahrung beim Mischen von -g (Debugging-Symbole) und -O2 (beste sichere Optimierung) mit gcc-Compiler?
Ich muss Abstürze von einem Release-Programm debuggen, das an Endbenutzer verteilt wird, die mir die Kerndatei zurücksenden könnten.Verwenden von -g und -O2-Optionen in gcc

gdb < < myprogram >> < < Core-Datei >>

und sehen, wo das Problem ist:
Ich habe immer zu nennen pflegte. Jetzt kann ich nur die Call-Trace sehen, aber ohne Debugging-Symbole bin ich ziemlich in Schwierigkeiten.

Irgendeine Idee?

Antwort

6

Wir verwenden beide zusammen in der Produktionsumgebung, was das Debugging viel einfacher macht, wenn der Kunde nur einmal einen Absturz gesehen hat. Es gibt Ihnen eine ziemlich gute Idee, wo das Problem ist (nicht, wenn es eine Speicherbeschädigung war).

Theoretisch sollte das Hinzufügen von -g nicht wirklich die Leistung beeinflussen, obwohl die ausführbare Datei groß wird. In einer eingebetteten Umgebung ist dies ein großer Kompromiss.

+5

Das Bild mit den Symbolen wird nur vom Debugger benötigt. Wenn Sie einen Remote-Debugger verwenden oder ein Post-Mortem-Debugging von einer Core-Datei aus durchführen, können auf dem Image, das auf dem Ziel ausgeführt wird, die Symbole entfernt werden. –

10

Es funktioniert gut.

Oder gut, aufgrund der Optimierung manchmal die Quelle, die Sie mit dem Debugger durchlaufen nicht mit der Quelle übereinstimmen, aber IMHO trotz dieser mit den Debug-Symbolen macht das Debuggen viel einfacher.

+4

Manchmal werden auch die Quellzeilen außerhalb der Reihenfolge ausgeführt, was mich zuerst verwirrt hat. – mkb

+0

Ich bin an dieses Behaviour Debugging VC Release-Code gewöhnt. Ich war nur herumwandern, wenn der Code trotzdem optimiert ist, auch wenn ich -g erklären ... –

+4

'-g' hat keinerlei Auswirkungen auf den Code, nur auf zusätzliche Debugging-Daten generiert. –

Verwandte Themen