web-dev-qa-db-fra.com

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

Est-il possible d'effectuer une exécution inversée 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 effectuer quoi que ce soit. Si je dépasse le débogueur, je dois terminer le programme et le redémarrer, ce qui prend pas mal de temps.

125
Jason

Vous pouvez utiliser la commande drop to frame d'Eclipse pour ressaisir la méthode actuelle par le haut. Mais cela ne déroulera aucun changement d'état survenu, il peut donc ne pas fonctionner en fonction du type de méthode utilisé.

Le Omniscient Debugger est un autre outil vraiment génial qui vous permet de faire un pas en arrière dans le temps. Cela fonctionne en instrumentant les classes telles qu'elles sont chargées dans le chargeur de classes, afin qu'il puisse enregistrer tout ce que votre code fait. Il peut faire des choses très intéressantes, telles que répondre "quand, où et pourquoi ce champ a-t-il reçu sa valeur actuelle?". L'interface utilisateur est plutôt maladroite, et il peut être difficile de gérer des bases de code volumineuses, mais dans certains cas, cela peut réellement faire gagner beaucoup de temps.

Update : Chronon fournit un produit commercial qu’il décrit comme un "DVR pour Java", qui semble faire beaucoup de choses. les mêmes choses que le ODB.

133
Matt McHenry

Au-delà de ce qui a été mentionné dans les réponses précédentes - c'est-à-dire la fonctionnalité de déplacement dans un cadre d'Eclipse dans la vue vue de débogage , qui relance le débogage plus tôt dans le cadre de la pile (mais ne restitue pas les données globales/statiques) et Omniscient debugger , qui est un peu brut et qui n’évolue pas vraiment - il existe quelques outils basés sur Eclipse qui pourraient être utilisés pour "revenir en arrière" en (temps d'exécution):

JIVE étend le débogueur Eclipse Java 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 du programme. application (diagramme d’objet) et de la trace de pile (diagramme de séquence). Vous pouvez interroger la trace mémorisée et avancer et reculer dans le temps et consulter les diagrammes correspondants.

Diver enregistre uniquement 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 Exécuter et Déboguer 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 recherches académiques. Depuis 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, il s’agit probablement de l’enregistreur le plus complet car il est capable de rejouer l’historique enregistré, d’aller et d’arrière, permettant ainsi le débogage, comme on dit. De plus, Eclipse n'est pas nécessaire pour l'enregistrement.

Tous ces plugins sont assez gourmands en ressources, il est donc préférable d’avoir une bonne machine de spécification et d’utiliser leur fonction de filtrage. Pour pouvoir les exécuter avec succès, il est impératif de étendre l'espace de segment de mémoire 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 bloqué Eclipse en raison d'un manque de ressources. Diver pourrait être difficile à exécuter sur linux 64bit , il fonctionne sur Ubuntu 32bit et éventuellement sur d’autres distributions 32bit utilisant ces astuces . Diver fonctionne sous Windows, encore mieux sur une JVM Windows 64 bits + 64 bits, sinon vous serez limité à espace de tas maximal de 1,3 à 1,6 Go sur des fenêtres 32 bits . JIVE fonctionne très bien sur mon linux 64 bits et semble bien fonctionner sur d’autres plates-formes.

44
fmjrey

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

Ouvrir Configuration de débogage -> Débogueur -> Activer le débogage inversé au démarrage.

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

12
Sergei

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

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

5
pdeva

Je cherchais aussi cette fonctionnalité dans Eclipse. Je sais que le studio visuel peut le faire. En réalité, vous pouvez faire glisser le marqueur de ligne actuel et le déposer n'importe où dans le code. Je ne sais pas si les modifications apportées aux variables peuvent être annulées. Mais cela reste quand même très utile et fait gagner beaucoup de temps. J'attendais cela depuis très longtemps chez Eclipse.

3
Bruno V A Pinheiro

La question ne spécifie pas de langage Eclipse et de nombreuses 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 fonctionne comme Visual Studio Set Next Statement . Dans ce cas, Eclipse utilise la fonctionnalité de GDB.

Si vous utilisez Java, je ne sais pas comment y parvenir avec Eclipse ou Netbeans, bien que d'autres réponses aient suggéré des plugins. 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 à le haut de la fonction actuelle et je peux continuer à partir de là. Ce n'est pas la même chose que de spécifier la ligne, mais c'est quelque chose.

1
GravityWell