Ist <value optimized out - > in gdb ein problem?
Ich habe eine Anwendung, die nur die Abstürze im -O2-Optimierung (kompiliert mit gcc-4.2.4). Wenn ich Schritt durch den code und Holen Sie auf der Stelle, stürzt ab und versuchen Sie, untersuchen Sie den Wert, bekomme ich einen "value optimized out" in der gdb.
Ich im internet gelesen, dass dies bedeutet, dass der Wert in einem register gespeichert. Ich Frage mich, ob mein Absturz könnte damit zusammenhängen, dass einige Informationen abgelegt im Register? Gibt es eine Möglichkeit zu drucken, was ist in den Registern, um zu sehen, wenn es beschädigt wurde? Gibt es einen Weg, um Optimierungen jedoch nicht registriert?
Dank!
- Optimierung in der Regel nicht schaffen die bugs (das wäre extrem selten). Es kann jedoch Häufig die Ursache für memory leaks wurden unentdeckt in einer nicht optimierten version zu sein, ausgesetzt.
- Bitte akzeptieren Sie die Antwort, es hat fast 2 Jahre her, dass Sie diese Frage gestellt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist zu 99% iger Wahrscheinlichkeit ein bug im code und 1% Wahrscheinlichkeit ein compiler code generation Fehler. So verbringen Sie einen anteiligen Betrag der Zeit auf der Suche nach latenten Fehlern im code aber bewusst sein, dass Sie nur kann gefunden haben, einen code generation Fehler (in diesem Fall müssen Sie die Untersuchung der compiler generiert code sorgfältig, um zu sehen, was das problem ist).
versuchen
info registers
im gdb.Können, deaktivieren Sie die Optimierung mit -O0, aber es gibt da etwas faul und ich schlage vor, Sie weiter zu untersuchen und schließlich nach dem code.
Wenn Sie erkennen können, die Fehler in Ihrem Programm fließen könnten Sie tun,, einige drucken sich selbst, wenn es etwas zu tun mit memory-leaks und memory-Korruption, dann valgrind ist wohl ein besserer Freund als gdb.
Dies ist nicht ein problem, es ist eher ein Problem mit der aggressiven Optimierungen in neueren Versionen von gcc.
Finden Sie unter: Einen Plan zu Fixieren Lokale Variable Debug-Informationen in GCC.
Die eine Sache zu beobachten ist, Zeiger-aliasing, wo der compiler kann Annahmen, dass Sie das nicht beachten, zum Beispiel, dass ein Zeiger übergeben Sie in einer Funktion nicht auf eine Globale variable, die auch von der Funktion.
Aber Sie können dies Steuern, mit compiler-Optionen, etc.