Comment revenir en arrière dans le débogueur Eclipse?

Est-il possible de faire une exécution inverse dans le débogueur Eclipse? Le projet en cours sur lequel je travaille nécessite un minimum de 5 secondes pour lire et initialiser les données d’un fichier avant de pouvoir faire quelque chose. Si je dépasse le débogueur, je dois terminer le programme et redémarrer, ce qui prend pas mal de temps.

Vous pouvez utiliser la commande drop to frame d’ Eclipse pour ressaisir la méthode actuelle depuis le haut. Mais cela ne déroulera aucun changement d’état, de sorte que cela ne fonctionnera pas selon le type de méthode que vous utilisez.

Le débogueur Omniscient est un autre outil vraiment génial qui vous permet de revenir en arrière dans le temps. Cela fonctionne en instrumentant les classes pendant qu’elles sont chargées dans le chargeur de classe, ainsi il peut enregistrer tout ce que votre code fait. Il peut faire des choses très cool, comme répondre “quand, où et pourquoi ce champ a-t-il été atsortingbué à sa valeur actuelle?”. L’interface utilisateur est plutôt encombrante et elle peut difficilement gérer de grandes bases de code, mais dans certains cas, elle permet de gagner beaucoup de temps.

Mise à jour : Chronon fournit un produit commercial qu’il décrit comme un “DVR for Java”, qui semble faire beaucoup de choses comme l’ODB.

Au-delà de ce qui a été mentionné dans les réponses précédentes – la fonctionnalité drop to frame d’Eclipse dans la vue de débogage , qui redémarre le débogage plus tôt dans le frame de stack (mais ne rétablit pas les données globales / statiques) en évolution – il existe quelques outils basés sur Eclipse qui pourraient être utilisés pour “revenir en arrière” en (temps) d’exécution:

  • JIVE : environnement de visualisation interactif Java
  • Chronon : un «enregistreur de données de vol» pour les programmes Java
  • Diver (arrêté) : vues interactives dynamics pour l’ingénierie inverse
  • Halik : Seulement pour IntelliJ pour le moment, mais le portage sur Eclipse est mentionné dans la feuille de route .

JIVE étend le débogueur Java Eclipse avec la possibilité d’enregistrer les états du programme. La perspective JIVE fournit des diagrammes UML utiles qui sont mis à jour pendant l’exécution du programme. Ces diagrammes donnent un aperçu de l’état de l’application (diagramme d’objects) et de la trace de la stack (diagramme de séquence). Vous pouvez interroger la trace mémorisée et revenir en arrière dans le temps et voir les diagrammes correspondants.

Diver enregistre uniquement les appels de méthode et n’enregistre pas vraiment les états du programme comme JIVE. Chaque événement d’appel de méthode est stocké pour une récupération et une parsing ultérieures. Il étend les configurations Java Run et Debug principalement pour spécifier des filtres. La trace peut être suspendue / reprise / filtrée à l’exécution. Une fois enregistrée, la perspective Diver 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 ses licences sont gratuites pour les étudiants et les projets open source. D’après ce qui est revendiqué sur leur site Web, il s’agit probablement de l’enregistreur le plus complet, car il est en mesure de reproduire l’historique enregistré, en faisant des allers-retours, ce qui leur permet de passer du temps à déboguer. Aussi, Eclipse n’est pas nécessaire pour l’enregistrement.

Tous ces plug-ins sont très gourmands en ressources, il est donc préférable d’avoir une bonne machine de spécification et d’utiliser leur fonctionnalité de filtrage. Une exigence précise pour les exécuter avec succès est d’ étendre l’espace de tas dans eclipse.ini .

Dans mon cas, j’ai essayé d’utiliser JIVE et Diver pour déboguer un programme d’parsing XML mais j’ai toujours fini par geler l’éclipse par manque de ressources. Diver pourrait être difficile à exécuter sur Linux 64 bits , il fonctionne sur Ubuntu 32 bits et peut-être sur d’autres dissortingbutions 32 bits en utilisant ces conseils . Diver fonctionne sous Windows, mieux encore sur une JVM Windows 64 bits + 64 bits, sinon vous serez limité à un espace de stockage maximal de 1,3-1,6 Gb sur les fenêtres 32 bits . JIVE fonctionne parfaitement sur mon Linux 64 bits et semble fonctionner correctement sur d’autres plates-formes.

Oui , Eclipse CDT prend en charge la fonctionnalité de débogueur historique.

Ouvrez la configuration du débogage -> Debugger -> Activer le débogage au démarrage .

Vous pouvez ensuite appuyer sur shift+F5 ou sur shift+F6 pour reculer comme F5 ou F6 pour avancer.

Je suis partial, mais Chronon fait exactement ce que vous recherchez.

Drop to Frame n’est pas exactement en retrait, car si la méthode a changé quelque chose sur le tas, elle ne sera pas annulée.

Je cherchais aussi cette fonctionnalité dans eclipse. Je sais que le studio visuel peut le faire. En fait, vous pouvez faire glisser le marqueur de ligne actuel et revenir n’importe où dans le code. Je ne suis pas sûr que les modifications apscopes aux variables puissent être annulées. Mais c’est quand même très utile et économise beaucoup de temps. J’attendais cela depuis très longtemps.

La question ne spécifie pas de langage Eclipse et la plupart des réponses supposent Java.

Si vous utilisez C ++ et GCC avec le débogueur GDB, Eclipse a Run->Move to Line qui exécute le travail et fonctionne comme le Visual Studio Set Next Statement . Dans ce cas, Eclipse utilise la fonctionnalité qui se trouve dans GDB.

Si vous utilisez Java, je ne connais aucun moyen d’y parvenir avec Eclipse ou Netbeans, bien que d’autres réponses proposent des plug-ins. Eclipse a la commande “drop to frame” qui fonctionne pour Java dans ma version (Juno SR1). Si je modifie et enregistre le code dans une fonction en mode débogage, la ligne d’exécution passe automatiquement en haut de la fonction en cours et je peux continuer à partir de là. Pas la même chose que de spécifier la ligne, mais c’est quelque chose.