2015-07-15 20 views
9

Wenn ich mein C++ - Programm mit g++ mit der -Og Option kompilieren, sehe ich Variablen, die <optimized out> sind, und auch die aktuelle Zeile manchmal überspringt. Wird dieses Verhalten auf dieser Optimierungsstufe erwartet, oder habe ich ein Problem? Die Manpage von gcc sagt:Variablen optimiert mit g ++ und die Option -Og

-Og

Optimieren der Debuggerfahrung. -Og ermöglicht Optimierungen, die das Debugging nicht beeinträchtigen. Es sollte die Optimierungsstufe der Wahl für den Standard-Edit-Compile-Debug-Zyklus sein, die ein angemessenes Optimierungsniveau bietet, während eine schnelle Kompilierung und eine gute Debugging-Erfahrung beibehalten werden.

daher habe ich dieses Verhalten nicht erwartet. Auf meinem System habe ich g ++ Version 4.9.2 und gdb Version 7.7.1.

+0

"... mit einem * vernünftigen * Optimierungsgrad ..." –

+1

Der Compiler darf solange optimieren, wie die * as-if * Regel eingehalten wird. Dies könnte das Entfernen von Variablen (oder die Konvertierung in Konstanten) sowie das Löschen nicht verwendeter Funktionen umfassen. –

+0

Ich verstehe. Mein Hauptproblem besteht darin, dass die aktuelle Zeile in einer Weise, die ich nicht erwarte/vergesse, in verschiedenen Funktionen hin- und herspringt. Wäre es für mich dann am besten, die -OO-Option zu verwenden? Oder gibt es eine gute Möglichkeit, das Verhalten zu verstehen und bei "-Og" zu bleiben? – Svaberg

Antwort

0

Dies ist normales Verhalten beim Kompilieren mit der Option -Og. Auf dieser Optimierungsebene darf der Compiler optimieren, solange er an der as-if rule festhält. Dies könnte das Entfernen von Variablen (oder die Konvertierung in Konstanten) sowie das Löschen nicht verwendeter Funktionen umfassen.

Die Empfehlung ist entweder sich an das Überspringen zu gewöhnen oder mit der Option -O0 zu kompilieren.

+1

Dieses Verhalten scheint in direktem Widerspruch zu dem Anspruch in der Dokumentation zu stehen, dass '-Og 'aktiviert" Optimierungen, die das Debugging nicht beeinträchtigen ". Die Werte von Variablen zu sehen ist eine hübsche Komponente des Debuggens. – BeeOnRope