Mit dem Befehl drop to frame von Eclipse können Sie die aktuelle Methode von oben erneut eingeben. Es werden jedoch keine aufgetretenen Statusänderungen abgewickelt, sodass es je nach Art der Methode, in der Sie sich befinden, möglicherweise nicht funktioniert.
Ein weiteres wirklich cooles Tool, mit dem Sie rechtzeitig vor- und zurückgehen können, ist der Omniscient Debugger . Es funktioniert, indem Klassen instrumentiert werden, während sie in den Klassenladeprogramm geladen werden, sodass alles aufgezeichnet werden kann, was Ihr Code tut. Es kann sehr coole Dinge tun, wie die Antwort "Wann, wo und warum wurde diesem Feld der aktuelle Wert zugewiesen?". Die Benutzeroberfläche ist ziemlich klobig und es kann schwierig sein, mit großen Codebasen umzugehen, aber in einigen Fällen kann sie wirklich viel Zeit sparen.
Update : Chronon bietet ein kommerzielles Produkt an, das als "DVR für Java" bezeichnet wird und anscheinend viele der gleichen Aufgaben wie die ODB ausführt.
Über das hinaus, was in früheren Antworten erwähnt wurde - dh die Drop-to-Frame-Funktion von Eclipse in der Debug-Ansicht , die das Debuggen früher im Stack-Frame neu startet (aber keine globalen / statischen Daten zurücksetzt ), und der Omniscient-Debugger , der etwas roh und nicht so sehr ist Weiterentwicklung - Es gibt einige Eclipse-basierte Tools, mit denen Sie in der (Laufzeit-) Zeit "zurückkehren" können:
JIVE erweitert den Eclipse Java-Debugger um die Möglichkeit, die Programmzustände aufzuzeichnen. Die JIVE-Perspektive bietet einige nützliche UML-Diagramme, die während der Ausführung des Programms aktualisiert werden. Diese Diagramme geben einen Überblick über den Status der Anwendung (Objektdiagramm) und der Stapelverfolgung (Sequenzdiagramm). Sie können die gespeicherte Ablaufverfolgung abfragen und rechtzeitig vor- und zurückgehen und die entsprechenden Diagramme anzeigen.
Diver zeichnet nur Methodenaufrufe auf und zeichnet Programmzustände wie JIVE nicht wirklich auf. Jedes Methodenaufrufereignis wird zum späteren Abrufen und Analysieren gespeichert. Es erweitert die Java Run- und Debug-Konfigurationen hauptsächlich, um Filter anzugeben. Der Trace kann zur Laufzeit angehalten / fortgesetzt / gefiltert werden. Einmal aufgenommen, kann die Taucherperspektive es in einem interaktiven Sequenzdiagramm anzeigen.
JIVE und Diver sind Open-Source-Projekte aus der akademischen Forschung. Ab November 2012 sind beide Projekte aktiv.
Chronon ist ein kommerzielles Produkt, aber sie haben kostenlose Lizenzen für Studenten und Open Source-Projekte. Nach dem, was auf ihrer Website behauptet wird, ist es wahrscheinlich der umfassendste Rekorder, da er in der Lage ist, den aufgezeichneten Verlauf wiederzugeben, hin und her zu gehen und so das Debuggen auf Zeitreise zu ermöglichen. Auch Eclipse wird für die Aufnahme nicht benötigt.
Alle diese Plugins sind ziemlich ressourcenschonend, daher ist es am besten, eine gute Spezifikationsmaschine zu haben und ihre Filterfunktion zu verwenden. Eine eindeutige Voraussetzung für eine erfolgreiche Ausführung ist die Erweiterung des Heap-Speicherplatzes in eclipse.ini .
In meinem Fall habe ich versucht, mit JIVE und Diver ein XML-Parsing-Programm zu debuggen, aber aufgrund fehlender Ressourcen die Eclipse immer eingefroren. Es könnte schwierig sein, Diver unter Linux 64- Bit zu betreiben. Mit diesen Tipps funktioniert es unter Ubuntu 32-Bit und möglicherweise anderen 32-Bit-Distributionen . Diver funktioniert unter Windows, besser noch unter Windows 64-Bit + 64-Bit-JVM. Andernfalls sind Sie auf einen maximalen Heap-Speicherplatz von 1,3 bis 1,6 GB unter 32-Bit-Fenstern beschränkt . JIVE funktioniert hervorragend unter meinem 64-Bit-Linux und scheint auf anderen Plattformen einwandfrei zu funktionieren.
quelle
Ja , Eclipse CDT unterstützt die Funktion für historische Debugger.
Öffnen Sie die Debug-Konfiguration -> Debugger -> Reverse Debugging beim Start aktivieren .
Dann können Sie drücken
shift+F5
odershift+F6
für einen Schritt zurück wieF5
oderF6
für einen Schritt vorwärts.quelle
Ich bin voreingenommen, aber Chronon macht genau das, wonach Sie suchen.
Drop to Frame tritt nicht genau zurück, da die Methode, wenn sie etwas auf dem Heap geändert hat, nicht zurückgesetzt wird.
quelle
Ich habe diese Funktion auch in Eclipse gesucht. Ich weiß, dass das visuelle Studio das kann. Tatsächlich können Sie die aktuelle Linienmarkierung ziehen und an einer beliebigen Stelle im Code ablegen. Ich bin mir nicht sicher, ob die Änderungen an Variablen rückgängig gemacht werden können. Trotzdem ist es sehr nützlich und spart viel Zeit. Ich habe sehr lange in Eclipse darauf gewartet.
quelle
Die Frage gibt keine Eclipse-Sprache an, und viele der Antworten setzen Java voraus.
Wenn Sie C ++ und GCC mit dem GDB-Debugger verwenden, hat Eclipse
Run->Move to Line
die Aufgabe und funktioniert wie die Visual Studio Set Next-Anweisung . In diesem Fall verwendet Eclipse die in GDB enthaltene Funktion.Wenn Sie Java verwenden, ist mir kein Weg mit Eclipse oder Netbeans bekannt, obwohl andere Antworten Plugins vorgeschlagen haben. Eclipse verfügt über den Befehl "Drop to Frame", der in meiner Version (Juno SR1) für Java funktioniert. Wenn ich Code innerhalb einer Funktion im Debug-Modus ändere und speichere, wird die Ausführungszeile automatisch an den Anfang der aktuellen Funktion verschoben und ich kann von dort aus fortfahren. Nicht dasselbe wie die Angabe der Zeile, aber es ist etwas.
quelle