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
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.
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.
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...
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.