Comment revenir en arrière dans Eclipse debugger?

est-il possible de faire une exécution inverse dans Eclipse debugger? Le projet actuel sur lequel je travaille nécessite un minimum de 5 secondes pour lire et initialiser les données d'un fichier avant que quelque chose ne puisse être fait. Si je dépasse les limites du débogueur, je dois terminer le programme et le redémarrer, et cela prend un certain temps.

118

6 réponses

vous pouvez utiliser la commande drop to frame D'Eclipse pour entrer de nouveau la méthode courante à partir du haut. Mais il ne va pas dérouler des changements d'état qui se sont produits, de sorte qu'il peut ne pas fonctionner selon le genre de méthode que vous êtes dans.

le débogueur Omniscient est un autre outil vraiment cool qui vous permet d'avancer et de reculer dans le temps . Il fonctionne en instrumentant les classes comme elles sont chargées dans le classloader, de sorte qu'il peut enregistrez tout ce que votre code fait. Il peut faire des choses très cool, comme la réponse " quand, où et pourquoi ce champ a-t-il reçu sa valeur actuelle?". L'interface utilisateur est assez rigide, et il peut être difficile de gérer de grandes bases de code, mais dans certains cas, il peut vraiment faire gagner beaucoup de temps.

Update : Chronon fournit un produit commercial qu'il décrit comme un "DVR pour Java", qui semble faire beaucoup des mêmes choses que le Le PMO.

126
répondu Matt McHenry 2017-05-26 18:21:56

au-delà de ce qui a été mentionné dans les réponses précédentes - c'est - à-dire la fonctionnalité drop to frame D'Eclipse dans la debug view , qui redémarre le débogage plus tôt dans le cadre de la pile (mais ne retourne pas les données globales/statiques) et Omniscient debugger , qui est un peu brut et qui n'évolue pas tellement-il y a quelques outils basés sur Eclipse qui pourraient être utilisés pour "revenir en arrière" dans le temps (d'exécution):

JIVE s'étend de l'Éclipse Débogueur Java avec la possibilité d'enregistrer les États du programme. La perspective JIVE fournit quelques diagrammes UML utiles qui sont mis à jour pendant que le programme est en cours d'exécution. Ces diagrammes donnent un aperçu de l'état de l'application (diagramme d'objets) et de la trace de la pile (diagramme de séquence). Vous pouvez interroger la trace mémorisée et faire un pas en arrière et en avant dans le temps et voir les diagrammes correspondants.

le plongeur enregistre seulement les appels de méthode et n'enregistre pas vraiment les états de programme comme JIVE. Chaque événement d'appel de méthode est stocké pour une récupération et une analyse ultérieures. Il étend les configurations Java Run et Debug principalement pour spécifier les filtres. Trace peut être mis en pause/repris / filtré à l'exécution. Une fois enregistrée, la perspective du plongeur peut l'afficher dans un diagramme de séquence interactif.

JIVE et Diver sont des projets open source issus de la recherche universitaire. En novembre 2012, les deux projets sont actifs.

Chronon est un produit commercial, mais ils ont des licences gratuites pour les étudiants et les projets open source. De ce qui est revendiqué sur leur site web, c'est probablement l'Enregistreur le plus complet puisqu'il est capable de rejouer l'histoire enregistrée, de faire des allers-retours, en permettant comme ils disent le débogage voyage dans le temps. Aussi Eclipse n'est pas nécessaire pour l'enregistrement.

tous ces plugin sont assez gourmands en ressources donc il est préférable d'avoir une bonne machine spec et d'utiliser leur fonction de filtre. Une exigence précise pour les exécuter avec succès est à étendre l'espace tas dans eclipse.ini .

dans mon cas, j'ai essayé D'utiliser JIVE et Diver pour déboguer un programme D'analyse XML, mais j'ai toujours fini par geler eclipse en raison du manque de ressources. Diver pourrait être difficile à exécuter sur linux 64bit , il fonctionne sur ubuntu 32bit et peut-être d'autres distros 32bit en utilisant ces conseils . Diver travaille sur Windows, mieux encore sur Windows 64bit + 64bit JVM sinon, vous serez limité à un maximum tas espace de 1,3-1,6 Go sur 32bit windows . JIVE fonctionne très bien sur mon linux 64bit, et semble bien fonctionner sur d'autres plateformes.

44
répondu fmjrey 2017-05-23 12:17:36

Oui , Eclipse CDT a l'appui de historique débogueur fonctionnalité.

Ouvrir Configuration Debug -> Débogueur -> Activer Le Débogage Inversé au démarrage .

que vous pouvez appuyer sur shift+F5 ou shift+F6 pour reculer comme F5 ou F6 pour avancer.

11
répondu Sergei 2016-10-13 07:50:46

je suis partial, mais Chronon fait exactement ce que vous cherchez.

Drop d'Image n'est pas exactement reculer d'un pas, car si la méthode a changé quoi que ce soit sur le tas, il ne sera pas revenue.

5
répondu pdeva 2011-06-07 06:19:52

je cherchais cette fonctionnalité dans eclipse aussi. Je sais que le studio visuel peut faire ça. En fait, vous pouvez faire glisser le marqueur de ligne courant et le laisser tomber n'importe où dans le code. Je ne suis pas sûr que les changements de variables puissent être défaits. Mais il est encore très utile même si et économise beaucoup de temps. J'attends ça depuis très longtemps à eclipse.

3
répondu Bruno V A Pinheiro 2010-12-28 13:06:32

la question ne spécifie pas de langage Eclipse, et beaucoup de réponses supposent Java.

si vous utilisez C++ et GCC avec le débogueur GDB, Eclipse a Run->Move to Line qui fait le travail et les fonctions comme le studio visuel Set Next Statement . Dans ce cas, Eclipse utilise la capacité qui est dans GDB.

si vous utilisez Java, Je ne suis pas au courant d'un moyen de le faire avec Eclipse ou Netbeans, bien que d'autres réponses ont suggéré greffon. Eclipse a la commande "drop to frame" qui fonctionne pour Java dans ma version (Juno SR1). Si je modifie et sauve du code dans une fonction en mode debug, la ligne d'exécution se déplace automatiquement vers le haut de la fonction courante et je peux continuer à partir de là. Pas la même que la spécification de la ligne, mais c'est quelque chose.

1
répondu GravityWell 2012-11-27 18:28:14