Puis-je trouver la valeur de retour avant de retourner lors du débogage dans Intellij?

127

Avec:

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

Existe-t-il un moyen de voir quelle valeur sera retournée lors du débogage? Comme en quelque sorte définir un point d'arrêt qui serait atteint juste après le retour, mais avant que l'exécution ne passe au code appelant? Je voudrais être en mesure de savoir quelle est la valeur de retour et également être en mesure de voir quelles sont les valeurs de toutes les variables locales.

La façon dont je le fais maintenant en faisant une variable temporaire: Object ret = /* something complex */; return ret;. Mais c'est un problème et ajoute également une ligne de code supplémentaire inutile.

Remarque: Il s'agit de la même question que Puis-je trouver la valeur de retour avant de retourner lors du débogage dans Visual Studio , mais pour intellij.

Kyle
la source

Réponses:

31

Il semble y avoir plusieurs façons de procéder. La première consiste à configurer le point d'arrêt sur la signature de la méthode, dans votre cas, vous définiriez un point d'arrêt sur la méthode Object () {. Cela vous permettra de surveiller l'entrée et la sortie de la méthode. Je pense que vous devez utiliser cela en conjonction avec les " valeurs de retour de méthode de surveillance" comme indiqué ci-dessus, mais je n'ai pas été en mesure de tester complètement cela car le calcul prend trop de temps. Attention, cela diminue considérablement les performances du débogueur et le débogage prendra plus de temps.

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

  1. Configurez le point d'arrêt sur la ligne de retour.
  2. Lorsque la ligne de retour est frappée, cliquez sur la ligne de retour, placez spécifiquement le curseur sur l'opération que vous voulez voir, puis allez dans Exécuter-> Évaluer l'expression (ou Alt-F8) et il devrait exécuter l'expression à ce point et retourne ce qu'il retourne.

Remarque : Si vous créez un point d'arrêt, vous pouvez demander à IDEA de faire beaucoup de choses avec lui, par exemple si vous interrompez un point d'arrêt, vous pouvez leur dire d'exécuter une expression et de la consigner. Vous pouvez voir ce que vous pouvez faire si vous cliquez avec le bouton droit sur un point d'arrêt et cliquez sur Propriétés.

MISE À JOUR : Essayez ceci en conjonction avec la première façon de le faire. N'utilisez pas «Watch method return values» car cela semble ralentir ou geler la session de débogage. Faites plutôt ce qui suit

  1. Faites un clic droit sur l'expression de retour que vous souhaitez voir et cliquez sur "Ajouter aux montres"
  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'arrêter à nouveau APRÈS que l'expression de retour a été calculée et que votre expression de retour doit être dans la colonne de surveillance.

N'oubliez pas que les points d'arrêt de méthode sont plus lents, donc cela peut prendre plus de temps, un moyen difficile d'améliorer cela si vous remarquez trop de problèmes de performances consiste simplement à définir le point d'arrêt de l'instruction de retour (sans avoir de point d'arrêt de méthode), puis à ajouter le point d'arrêt de la méthode. APRÈS que le point d'arrêt de l'instruction return ait atteint, puis continue.

J'espère que cela t'aides,

jluzwick
la source
1
En fait, une fois que vous avez ajouté un point d'arrêt et une montre à (new X ()), vous pouvez simplement faire Alt + F8 sur cette montre pour «analyser» l'objet renvoyé. Ceci est vraiment utile.
Kedar Mhaswade
Si je comprends bien, la solution proposée ici ne fonctionne que si l'expression n'a pas d'effets secondaires. Je ne recommande certainement pas de mettre des expressions compliquées dans la fenêtre de variables / de surveillance en général.
Mashmagar
Depuis au moins 2016.3, il existe un bien meilleur moyen. Voir la réponse de Birchlabs pour plus de détails. Cela devrait maintenant être la réponse acceptée.
Mikezx6r
150

Sur IntelliJ IDEA 2016.3: il est caché à l'intérieur du bouton rouage du panneau de débogage. Assurez Show Method Return Values- vous que c'est vérifié .

IntelliJ IDEA 2016.3 «Afficher les valeurs de retour de méthode»

Utilisez le débogueur pour casser quelque part dans la fonction dont vous souhaitez voir la valeur de retour.

entrer en fonction

Sortez de la fonction (ou passez jusqu'à ce que vous vous échappiez):

sors

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

observer la valeur de retour

Birchlabs
la source
3
@Stan J'ai mis à jour ma réponse pour fournir un exemple concret.
Birchlabs
40

Le bouton Watch method return values ​​est disponible dans le panneau du débogueur .

Regarder les valeurs de retour de méthode : cliquez sur ce bouton pour afficher les valeurs de retour de la dernière méthode exécutée.

regarder les valeurs de retour de la méthode

Configuration IDEA 12:

IDÉE 12

CrazyCoder
la source
2
Rien ne semble apparaître dans les onglets "Variables" ou "Montres". J'utilise Groovy si cela compte. En outre, cela semble afficher la valeur de retour de la dernière méthode exécutée à partir du contexte du code appelant, plutôt que du contexte de la méthode elle-même. La différence importante est que si vous pouvez le voir à partir du contexte de la méthode elle-même, vous pouvez également consulter les valeurs des variables locales de la méthode. Cela pourrait vous permettre de voir ce qui ne va pas si la méthode renvoie une valeur incorrecte.
Kyle
3
Il affiche la valeur de retour dans le volet "Variables" (en utilisant le nom de méthode complet). Cela aurait dû être la réponse acceptée. @CrazyCoder +1 de ma part :-)
Omri Spector
4
@CrazyCoder: Cette fonctionnalité existe-t-elle toujours pour IDEA 13? Je ne le trouve pas.
kevinarpe
1
Je suis sur Intellij 15 et je ne vois pas cela aussi. Pouvez-vous publier une capture d'écran?
Sanjiv Jivan
3
en janvier 2017 (Idée 2016.3.2): vous devez cliquer sur l'icône Paramètres (l'engrenage, juste au-dessus de l'élément de menu jaune sur la 2ème image), un menu montre qui comprend "Afficher les valeurs de retour de méthode". Pas besoin de quoi que ce soit redémarrer: après le retour prochain d'une méthode, son ObjectClassName.methodName () apparaît dans la vue Variables juste en dessous de ce .
18446744073709551615
1

Cela a été demandé il y a quelque 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 «retour») et appuyer sur CTRL + ALT + F8 (Expression d'évaluation rapide). IntelliJ fera apparaître une petite fenêtre vous montrant la valeur qui sera retournée.

illimiténzt
la source
2
Si vous utilisez une puce graphique Intel, ce raccourci clavier arrêtera vos moniteurs secondaires .
Coli
1
Utilisateurs Linux: Ctrl + Alt + F8 - enverra l'utilisateur au 2ème terminal GUI. Dans Ubuntu, j'ai appuyé sur Ctrl + Alt + F2 pour revenir en arrière.
Dmitriy Pavlukhin