lokale Variablen in Konstrukteuren nicht befolgt werden. Ist das ein Fehler in Gdb?

StackOverflow https://stackoverflow.com/questions/224090

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin derzeit laufend GDB Version 6.7.1 auf Ubuntu Linux, und in einem C ++ Projekt arbeiten.

Überraschenderweise war ich versucht, einen Konstruktor zu debuggen und ich festgestellt, dass lokale Variablen im Rahmen des Konstruktors deklariert werden nicht von GDB gefolgt oder bemerkt. Ist das ein Fehler?

Vielen Dank für jede Information ..

War es hilfreich?

Lösung

Es ist ein Fehler in GCC, nicht in GDB.

Es war vor kurzem Fest .

Andere Tipps

Wenn Sie Optimierung verwenden (O), deaktivieren (entfernen Sie die -O oder verwenden -O0). Der Compiler ist manchmal zu klug und errät eine Variable es nicht benötigt wird, tun Berechnungen bei der Kompilierung, ein Umfang der Variablen ändern, oder einige andere Tricks.

Hinweis

, dass auch bei „keine Optimierung“ werden einige triviale Optimierungen noch zu tun, aber sie sollten mit Debuggen nicht viel stören. Auch mit Inline-schweren Verwendung von C ++ (einschließlich der STL), kann Ihr Programm ohne Optimierung viel langsamer geworden.

Es klingt wie Sie eine optimierte Build debuggen.

Der Debugger ‚kennt‘ den Wert Ihrer lokalen Variablen, da die Symboldatei ihre Position beschreibt in den Funktionen Rahmen stapeln.

Der Debugger kann dann die Variablen liest aus dem Speicher des Zielprozesses. Dies erfordert jedoch, dass der Stapelrahmen enthält bisher Kopien der lokalen Variablen auf. Wenn ohne Optimierungen der generierte Code kompilieren schreibt immer lokale Variablen zurück in ihre Stapelrahmen Stellen jedesmal, wenn sie geändert werden. Dies macht das Debuggen einfach, kostet aber zur Laufzeit.

Für eine optimierte Build der Compiler häufig ableiten, dass diese Schritte nicht erforderlich sind, und einen Wert in einem CPU-Register halten, so lange wie es nötig ist. Es kann gut sein, dass die lokale Variable überhaupt nicht auf den Stack geschrieben Wert bekommt. Der Debugger hat in diesem Fall keine Möglichkeit, den Wert der Variablen der Verfolgung, aber auch dies nicht weiß, und wird oft Daten aus dem Stapel berichten, als ob es der Variablenwert waren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top