192 votes

Puis-je connaître la valeur de retour avant le retour lors du débogage dans Intellij ?

Avec :

Object method(){
    ...
    return /* some complex expression */
}

Existe-t-il un moyen de voir quelle valeur sera renvoyée lors du débogage ? Je ne sais pas si je peux le faire, mais je ne sais pas non plus si je peux le faire, mais je ne sais pas si je peux le faire. J'aimerais pouvoir savoir quelle est la valeur de retour et aussi pouvoir voir quelles sont les valeurs de toutes les variables locales.

Pour l'instant, je procède en créant une variable temporaire : Object ret = /* something complex */; return ret; . Mais c'est un problème et cela ajoute une ligne de code inutile.

Note : Il s'agit de la même question que Puis-je connaître la valeur de retour avant le retour lors du débogage dans Visual Studio ? mais pour intellij.

241voto

Birchlabs Points 3072

Sur IntelliJ IDEA 2016.3 : il est caché dans le bouton cog du panneau de débogage. S'assurer Show Method Return Values es vérifié .

IntelliJ IDEA 2016.3 "Show Method Return Values"

Utilisez le débogueur pour se briser quelque part à l'intérieur la fonction dont vous souhaitez voir la valeur de retour.

step into function

Sortir de la fonction (ou enjamber jusqu'à ce que vous vous échappiez) :

step out

Observez que la valeur de retour apparaît dans vos variables :

observe the return value

45voto

CrazyCoder Points 103123

Il y a Observer les valeurs de retour des méthodes disponible dans la rubrique panneau de débogage .

Observer les valeurs de retour des méthodes : Cliquez sur ce bouton pour voir les valeurs de retour de la dernière méthode exécutée.

watch method return values

Configuration d'IDEA 12 :

IDEA 12

33voto

jluzwick Points 1202

Il semble qu'il y ait deux façons de procéder. La première consiste à placer un point d'arrêt sur la signature de la méthode. Dans votre cas, vous devez placer un point d'arrêt sur Object method(){ . Cela vous permettra de surveiller l'entrée et la sortie de la méthode. Je pense que vous devez utiliser cette méthode en conjonction avec " Regarder les valeurs de retour des méthodes" comme indiqué ci-dessus, mais je n'ai pas été en mesure de le tester complètement car le calcul prend trop de temps. Attention, cela diminue considérablement les performances du débogueur et il faudra plus de temps pour déboguer.

Vous pouvez également effectuer les opérations suivantes manuellement.

  1. Définir le point d'arrêt sur la ligne de retour.
  2. Lorsque la ligne de retour est atteinte, cliquez sur la ligne de retour, placez le curseur sur l'opération que vous voulez voir, puis allez à Run->Evaluate Expression (ou Alt-F8) et l'expression devrait être exécutée à ce point et renvoyer ce qu'elle renvoie.

Note : Si vous créez un point d'arrêt, il y a beaucoup de choses que vous pouvez dire à IDEA de faire avec eux, comme par exemple si vous vous arrêtez sur un point d'arrêt, vous pouvez leur dire d'exécuter une expression et de l'enregistrer. Vous pouvez regarder ce que vous pouvez faire si vous faites un clic droit sur un point d'arrêt et que vous cliquez sur propriétés.

MISE À JOUR : Essayez cette méthode en même temps que la première. N'utilisez pas "Watch method return values" (surveiller les valeurs de retour des méthodes), car cela semble ralentir ou bloquer la session de débogage. Au lieu de cela, procédez comme suit

  1. Cliquez avec le bouton droit de la souris sur l'expression de retour que vous voulez voir et cliquez sur "Ajouter aux surveillances"
  2. Ensuite, ajoutez un point d'arrêt de méthode comme indiqué ci-dessus.
  3. Déboguez votre programme et votre méthode se cassera sur la signature de la méthode.
  4. Appuyez sur la touche F9 pour continuer et il devrait s'interrompre à nouveau. APRÈS l'expression de retour a été calculée et votre expression de retour doit se trouver dans la colonne watch.

N'oubliez pas que les points d'arrêt des méthodes sont plus lents et que cela peut donc prendre plus de temps. Un moyen astucieux d'améliorer la situation si vous remarquez un impact trop important sur les performances consiste à définir le point d'arrêt de l'instruction de retour (sans avoir de point d'arrêt de la méthode), puis à ajouter le point d'arrêt de la méthode. APRÈS le point d'arrêt de l'instruction de retour est atteint, puis continuer.

J'espère que cela vous aidera,

1voto

Ozilophile Points 121

Cette question a déjà été posée il y a un certain temps, mais j'utilise une méthode différente lorsque je veux gérer cette situation.

Lors du débogage, vous pouvez marquer l'expression (dans votre cas, l'expression juste après le "return") et cliquer sur CTRL + ALT + F8 (Évaluation rapide d'une expression). IntelliJ affichera une petite fenêtre vous montrant la valeur qui sera retournée.

0voto

Edvaaart Points 113

Comme la réponse acceptée ne répondait pas exactement à tous mes scénarios (ou du moins je n'ai pas pu les faire fonctionner en lisant les instructions) dans lesquels j'avais besoin de cela, je me suis senti libre de poster également une réponse qui le résout pour ma situation spécifique.

J'ai quelques exigences supplémentaires lorsque j'essaie d'inspecter la valeur de retour.

  1. Je ne veux pas quitter le champ d'application de la méthode dont nous revenons.

  2. Je ne veux pas appeler le dans l'instruction de retour deux fois (une fois pour l'inspection et une fois pour l'analyse). lors du retour effectif), comme le montre bien l'utilisation de la méthode Math.random() dans l'exemple.

Pour moi, la solution était plutôt inattendue. Après avoir joué avec Passer à l'étape suivante (par opposition à Sortir ), j'ai trouvé la construction suivante :

Au lieu d'utiliser

private double rand() {
    return Math.random();
}

J'utilise

private double rand() {
    return 
      Math.random();
}

Lorsque votre curseur se trouve sur Math.random() , sélectionner Passer à l'étape suivante et il affichera la valeur dans la fenêtre de surveillance, sans quitter la portée de l'appel de la fonction rand() .

Il semble donc que le Passer à l'étape suivante mentionnée dans la réponse acceptée ne résout pas le problème si le return se trouve sur la même ligne que l'expression que vous essayez d'inspecter. Ce qui est bien sûr logique d'un point de vue syntaxique.

Je suppose que cela peut encore poser des problèmes pour les autoformateurs qui réduisent ces deux lignes en une seule, mais pour moi, cela a finalement résolu mon problème de débogage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X