Debug Optionen -G mit Optimierungen -O

OP #2886979
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
Moderator Persönliche Seite #2887091
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.
Gast #2887128
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.
Persönliche Seite #2887937
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren