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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.