Debugger -> value optimized out
-
Hallo liebe Forengemeinde,
ich bin gerade fröhlich am debuggen einer Funktion mit einem für mich unerklärlichen Fehler. Dabei möchte ich eine einfach Integer-Variable, die ich vorher deklariert und definiert habe, beobachten.
-> int gelesen=0;
Ich benutze Code::Blocks mit MinGW und den standartmäßigen Debugger. Wenn ich nun meine Variable "gelesen" watche, steht beim Wert immer <value optimized out>
Ich bin mir aber sehr sicher, dass die einen Wert haben muss, der ganz normal ist. Was ist hier genau passiert? Was kann ich damit anfangen?Danke schomal im v*******
-
Das bedeutet, dass die Optimierungskomponente des Compilers den Wert wegoptimiert hat, weil er an der Stelle nicht benötigt wurde. Das kann passieren, wenn der Compiler beweisen kann, dass der Wert an dieser Stelle immer der selbe sein muss oder am Programmfluss nichts ändert.
Viel interessanter ist die Frage, warum du für einen Debug-Build den Optimierer angeschaltet hast.
-
Ein mal ins Compiler- und IDE-Forum verschieben...
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Zum Debuggen empfiehlt es sich u.a. daher auch die Optimierungen abzudrehen.
-
Ich würde mir lieber mal die Frage stellen, warum der Compiler der Meinung ist, die Variable wäre an der Stelle unwichtig und du da aber anderer Meinung bist? Sonst würdest du den Wert an der Stelle nicht kontrollieren wollen. Vielleicht macht dein Code aber gar nicht das, was du denkst? Den Hinweis das eine scheinbar wichtige Variable nicht benötigt wird, finde ich sehr wichtig und sollte nicht einfach ignoriert werden. Indem du die Optimierung ausschaltest. Da bei der Optimierung nicht nur Variablen weg optimiert werden, sondern auch Code, macht es Sinn im Schrittbetrieb trotzdem die Optimierung auszuschalten. Das ändert aber nichts am Hinweis, dass eine benötigte Variable nicht benutzt wird.
-
Paul Müller schrieb:
Ich würde mir lieber mal die Frage stellen, warum der Compiler der Meinung ist, die Variable wäre an der Stelle unwichtig und du da aber anderer Meinung bist?
Das ist überhaupt kein Widerspruch. Der Code, den man als Mensch schreibt, ist in den meisten Fällen nicht optimal für die Maschine, wenn man ihn direkt übersetzt. Eine Variable kann z.B. ganz einfach eliminiert werden, wenn sie nur einmal benutzt wird:
int a = b * c; f(a)
wird optimiert zu:
f(b * c)
(aufpassen mit Seiteneffekten)
-
Zu der Optimierung...
Die Variable, die wegoptimiert wurde, sollte eine Send-Funktion von Dateien auf den Rückgabewert -1 (Fehler) überprüfen. Anscheinend kann hier kein Fehler auftreten, lt. Compiler. Wie auch immer...ich habe das Problem einfach, wie im ersten Artikel von euch beschrieben, gelöst, indem ich die Optimierung rausgehauen habe. Hatte diese Funktion in meine IDE übersehen.
Programm funzt jetzt wunderbarDanke für die Hilfe