Forum: Compiler & IDEs Debug Optionen -G mit Optimierungen -O


von Paul E. (paul_e)


Lesenswert?

Hallo,
Die fundamentale Frage die mich beschäftigt ist, ob die Debugg Option 
eventuell die Optimierung behindert.
Näher, führt das Erzwingen von C-Code Zeilennummern an den ASM Blöcken 
mit –g oder –g3 zu Optimierungsverlusten mit O3? Da ja eigentlich zum 
Beispiel das Loop unrolling und function inlineing nicht gerade leicht 
nachvollziehbare Optimierungen für den Debugger sind? Hat jemand damit 
Erfahrung gemacht?
Gruß
eac

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul E. schrieb:

> Die fundamentale Frage die mich beschäftigt ist, ob die Debugg Option
> eventuell die Optimierung behindert.

Beim GCC nicht.  Die -g-Optionen bewirken lediglich, dass überhaupt
Debug-Informationen mit via Assembler in den Objektcode reingepackt
wird, aber die Optimierungsstrategie wird dadurch nicht geändert.

> Da ja eigentlich zum
> Beispiel das Loop unrolling und function inlineing nicht gerade leicht
> nachvollziehbare Optimierungen für den Debugger sind?

Das ist richtig.  Du bekommst im Debugger keine 1:1-Zuordnung des
abgearbeiteten Codes mehr zu deinem C-Code.  Ist Pech, geht halt
nicht.

von Sam P. (Gast)


Lesenswert?

Meine Erfahrung ist, dass -g3 mit -O3 bei heutigen gcc-Versionen 
einwandfrei funktioniert, aber der Nutzwert aufgrund der Optimierungen 
begrenzt ist. Da werden einzelne Assemblerbefehle den wildesten 
Quelltextzeilen zugeordnet und scheinbar chaotisch hin- und 
hergesprungen, weil der Optimierer beim Inlining unterschiedliche 
Programmteile zu einer einzigen gemeinsam genutzten Instruktion 
kondensiert hat.

Solange man also nicht das Verhalten des Optimierers sondern das 
Verhalten des eigenen Programms  analysieren will, sollte man auf -O2 
oder gar -O1 zurückschalten, das schont den Denkschmalz. In hartnäckigen 
Fällen schalte ich sogar auf -O0, einfach weil es leichter 
nachvollziehbar ist.

von Paul E. (paul_e)


Lesenswert?

Danke für eure Erfahrungsberichte.
Gruß
eac

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wie Jörg schon schrieb wird GCC niemals die Codeerzeugung vom 
gewählten Debug-Level oder -Format abhängig machen -- falls doch, ist 
das ein GCC-Bug.

Neurer GCC-Versionen unterstützen -Og, was nur Optimierungen 
einschaltet, die bekanntermaßen das Debugging nicht allzu sehr 
beeinträchtingen.  Wie nch oder fern -Og von -O0 bzw. -O1 ist, weiß ich 
net.  Ursprünglich war ja -O1 dafür gedacht, halbwegs akzeptabel zu 
optimieren und gleichzeitig brauchbare Debug-Info erzeugen zu können...

von Paul E. (paul_e)


Lesenswert?

Hallo,
ich hab die -Og Opotion in der html version der Dokumentaiton gefunden, 
leider aber nicht in der pdf. Weiß jemand seit welcher Version es die 
gibt?
Gruß
eac

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

http://gcc.gnu.org/PR53316

d.h. für 4.8.0

pdf und html werden aus dem gleichen .texi erzeugt. Du hast vermutlich 
pdf und html von unterschiedlichen Versionen.

von Paul E. (paul_e)


Lesenswert?

Danke

Das heißt es ist verdammt neu. Ich hab die pdf version von 4.7.2 :-D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.