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


129

Est-il possible d'effectuer une exécution inversée dans le débogueur Eclipse? 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 quoi que ce soit puisse être fait. Si je dépasse le débogueur, je dois terminer le programme et redémarrer, et cela prend un peu de temps.

Réponses:


136

Vous pouvez utiliser le drop to frame d' Eclipse commande pour ressaisir la méthode actuelle à partir du haut. Mais il ne déroulera pas les changements d'état qui se sont produits, donc cela peut ne pas fonctionner selon le type de méthode dans lequel vous vous trouvez.

Omniscient Debugger est un autre outil vraiment cool qui vous permet de revenir en arrière et d'avancer dans le temps . Il fonctionne en instrumentant les classes au fur et à mesure qu'elles sont chargées dans le chargeur de classe, afin de pouvoir enregistrer tout ce que fait votre code. Il peut faire des choses très intéressantes, comme répondre "quand, où et pourquoi ce champ a-t-il été affecté à sa valeur actuelle?". L'interface utilisateur est plutôt maladroite et elle peut avoir du mal à gérer de grandes bases de code, mais dans certains cas, elle peut vraiment gagner beaucoup de temps.

Mise à jour : Chronon fournit un produit commercial qu'il décrit comme un «DVR pour Java», qui semble faire beaucoup des mêmes choses que l'ODB.


@Matt McHenry J'essayais d'utiliser ODB1.5; avec un programme Java autonome mais je ne sais pas comment le faire fonctionner? Avez-vous des ressources autres que le site ODB expliquant les étapes pour le faire fonctionner de manière autonome et avec Eclipse?
Ayusman

@Ayusman: non, je suis désolé, je n'ai rien à partager en dehors de ce qui est sur le site ODB. Je ne serais pas surpris si cela ne fonctionne pas avec les nouveaux formats de fichiers .class, entre autres. :(
Matt McHenry

Réponse intéressante!
KrishPrabakar

Apparaît que le site Web du débogueur Omnscient a été mis en quadrillage de domaine.
Thorbjørn Ravn Andersen

45

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 vue de débogage , qui redémarre le débogage plus tôt dans le frame de pile (mais ne rétablit pas les données globales / statiques) et le débogueur Omniscient , qui est un peu brut et pas tellement évolutif - il existe quelques outils basés sur Eclipse qui pourraient être utilisés pour «revenir en arrière» dans le temps (d'exécution):

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 une vue d'ensemble de l'état de l'application (diagramme d'objets) 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 voir 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 Run et Debug principalement pour spécifier des filtres. La trace peut être interrompue / reprise / filtrée lors de 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 académique. Depuis novembre 2012, les deux projets sont actifs.

Chronon est un produit commercial, mais ils ont des licences gratuites pour les étudiants et des projets open source. D'après ce qui est déclaré sur leur site Web, c'est probablement l'enregistreur le plus complet car il est capable de rejouer l'historique enregistré, de faire des allers-retours, permettant comme on dit le débogage dans le temps. Eclipse n'est pas non plus 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écifications et d'utiliser leur fonction de filtre. Une exigence définitive pour les exécuter avec succès est d' étendre l'espace du 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 l'éclipse en raison du manque de ressources. Diver peut être difficile à exécuter sur Linux 64 bits , il fonctionne sur ubuntu 32 bits et éventuellement d'autres distributions 32 bits en utilisant ces conseils . Diver fonctionne sur Windows, mieux encore sur une JVM Windows 64 bits + 64 bits sinon vous serez limité à un espace de tas maximum de 1,3-1,6 Go sur Windows 32 bits . JIVE fonctionne très bien sur mon Linux 64 bits et semble fonctionner correctement sur d'autres plates-formes.


Diver n'est plus disponible
merours

12

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

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

Ensuite, vous pouvez appuyer sur shift+F5ou shift+F6pour reculer comme F5ou F6pour avancer.


1
Cette option existe-t-elle dans toutes les versions d'Eclipse? Je suis dangé si je peux le trouver partout.
EngineerBetter_DJ

1
Sa fonctionnalité GDB sourceware.org/gdb/wiki/ReverseDebug qui est prise en charge dans Eclipse par cette requête bugs.eclipse.org/bugs/show_bug.cgi?id=258284 . Eh bien, je suppose que la réponse est oui depuis 2009.
Sergei

Il est accessible en CDT.
Sergei

Je suis un développeur Java, donc je suppose que CDT ne me sera pas très utile?
EngineerBetter_DJ

@Sergei Je fais cela sous Windows 7 SP1 avec une ancienne version de Springsource. Pour activer le débogage inversé, vous devez d'abord déboguer comme-> Configurations de débogage-> Principal. Au bas de la page se trouve le lanceur de processus. Il indiquera "Utilisation du lanceur de processus de création standard" et il y aura un lien hypertexte vers "Sélectionner autre ...". Cliquez dessus et assurez-vous que "Utiliser les paramètres spécifiques à la configuration" est coché, puis sélectionnez "GDB (GSF) Créer un lanceur de processus" et cliquez sur OK. "Utilisation du lanceur de processus de création de GDB (GSF)" sera maintenant affiché en bas de l'onglet principal.
Sammy

5

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

Drop to Frame ne revient pas exactement en arrière, car si la méthode a changé quoi que ce soit sur le tas, elle ne sera pas inversée.


1
Chronon vous permet-il de le faire en temps réel? Je crois comprendre que vous devez d'abord enregistrer une session à l'aide de chronon, puis vous pouvez éventuellement revenir en arrière dans cette session. N'est-ce pas aussi bon que de redémarrer l'application? Ou peut-être que je manque quelque chose ..
Raam

2
oui, vous devez d'abord enregistrer votre application et vous pouvez ensuite la déboguer à tout moment à partir de l'enregistrement. C'est différent du redémarrage de l'application car vous n'avez pas besoin de suivre toutes les étapes pour reproduire le bogue. Tout ce que vous faites est d'enregistrer le bogue une fois, puis vous pouvez le consulter à tout moment que vous souhaitez déboguer en utilisant uniquement l'enregistrement. Vous n'avez besoin d'aucune partie de l'environnement d'origine pour lire l'enregistrement.
pdeva

Chronon fonctionne-t-il dans un environnement docker? Mon eclise n'est pas sur le local ..
Choi

3

Je cherchais également 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 le déposer n'importe où dans le code. Je ne suis pas sûr que les modifications apportées aux variables puissent être annulées. Mais il est toujours très utile et permet de gagner beaucoup de temps. J'attendais ça en éclipse depuis très longtemps.


1

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 Linequi fait le travail et fonctionne comme l' instruction suivante de Visual Studio Set . Dans ce cas, Eclipse utilise la fonctionnalité de GDB.

Si vous utilisez Java, je ne connais pas un moyen d'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 du code dans une fonction en mode débogage, la ligne d'exécution se déplace automatiquement vers 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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.