Prenez la fonction suivante:
DataTable go() {
return someTableAdapter.getSomeData();
}
Lorsque je définit un point d'arrêt dans cette fonction, y a-t-il une possibilité d'inspecter la valeur retournée? go()
est directement couplé à une grille de données dans une .aspx
page.
La seule façon d'inspecter la table de données retournée est d'utiliser une variable temporaire. Cependant, c'est un peu gênant. N'y a-t-il pas une autre façon?
Réponses:
Pas que je sache de. Notez que si vous faites ajouter une variable, il va être supprimée par le compilateur dans la version construit de toute façon ...
Mise à jour: cette fonctionnalité a été ajoutée à VS2013 . Vous pouvez voir les valeurs de retour dans les fenêtres d'autos ou utiliser
$ReturnValue
dans la fenêtre de surveillance / immédiate.La valeur ne peut être vue directement qu'après le retour de la fonction, donc le moyen le plus simple d'y accéder est de mettre un point d'arrêt sur l'appel de fonction et de passer (F10) l'appel.
Mise à jour pour VS2015: boo! malheureusement, il ne semble pas être dans la mise à jour VS2015 (devenv v14)
pour VS2017: il est de retour. (devenv v15)
la source
Cela peut être fait dans Visual Studio 2013 avec CLR 4.5.1 selon le site de commentaires des clients . Il n'était pas disponible dans les versions précédentes pour C #.
(Visual Studio 2008 et versions antérieures l'ont pris en charge pour VB.NET. Il a toujours été disponible pour les développeurs C / C ++.)
la source
Je suis d'accord que c'est une chose très utile à avoir: non seulement voir la valeur de retour de la méthode avant d'en sortir, mais aussi voir la valeur de retour des méthodes que je viens de franchir. Je l'ai implémenté dans le cadre d'une extension commerciale de Visual Studio appelée " OzCode ".
Avec lui, vous pouvez afficher les valeurs de retour de méthode directement sur l'éditeur de code, comme une sorte d'affichage HUD:
Pour plus d'informations, veuillez voir cette vidéo .
la source
Selon Microsoft, il n'y a aucun moyen de l'implémenter de manière fiable avec du code managé. C'est un problème qu'ils connaissent et sur lequel ils travaillent:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
la source
Concernant Visual Studio 2015:
Selon la réponse actuellement acceptée par Marc Gravell:
Cette réponse indiquait également que cette fonctionnalité ne fonctionne pas dans Visual Studio 2015. Ce n'est pas (entièrement) vrai. Sur Examiner les valeurs de retour des appels de méthode, il y a la note suivante:
J'ai testé cela dans Visual Studio 2015 Enterprise:
la source
$ReturnValue
fonctionnent. Cependant, la valeur de retour n'apparaît nulle part si l'Use managed compatibility mode
option de débogage est activée.Si vous allez dans le menu Outils → Options , IntelliTrace et modifiez le paramètre pour collecter les événements et les informations d'appel.
Vous pouvez revenir à l'événement d'appel précédent ( Ctrl+ Shift+ F11) et voir la valeur temporaire renvoyée par l'appel de méthode dans la fenêtre Autos en tant qu'enfant du nom de la méthode.
Cela ne vous montre pas la valeur de retour pour la méthode dans laquelle vous vous trouvez. Il vous montre juste la valeur de retour de la dernière méthode appelée dans la méthode actuelle.
Donc c'est bon pour
car il vous montre la valeur de retour pour
someTableAdapter.getSomeData()
.Mais pas pour:
la source
Vieille astuce des jours pré .NET: Ouvrez la fenêtre Registres et regardez la valeur du registre EAX. Celui-ci contient la valeur de retour de la dernière fonction appelée.
la source
Sortez de la méthode go () en utilisant Shift-F11, puis dans la fenêtre de débogage "Autos", il affichera la valeur de retour de l'appel de méthode qui vient de sortir de la pile (dans ce cas, la méthode go () qui est ce que tu veux). Il s'agit du comportement dans Visual Studio 2005; Je n'ai pas utilisé Visual Studio 2008, donc je ne sais pas si cela se comporte de la même manière dans cette version.
la source
Oui, il y a un très bon moyen. Un inconvénient majeur est qu'il faudrait attendre 5, voire 6 ans. Depuis que je vois que vous avez posté en novembre 2008, je vous suggère de waaaaaa ...
... aaaait. Et voilà! Pour vous, MS a publié la dernière version de Visual Studio 2013, où il s'agit d'une fonctionnalité par défaut accessible à partir des menus lors de l'exécution en mode débogage (menu Debug → Windows → Autos ).
la source
Il existe de nombreuses solutions de contournement, mais aucune ne semble satisfaisante.
Pour citer John Skeet ci-dessous (commentaire sur une réponse maintenant supprimée):
En théorie, le débogueur pourrait avoir une
return
variable. Après tout: c'est juste une variable sur la pile:Considérez donc cela comme une demande de fonctionnalité pour Visual Studio.
la source
Je voulais développer la réponse de PascalK pour que cela fonctionne dans Visual Studio 2015, car il existe une fonctionnalité cachée qui n'est pas documentée dans Examiner les valeurs de retour des appels de méthode .
Si vous avez des appels de fonction imbriqués, les pseudo-variables
$ResultValueX
sont automatiquement créées, où le X fait référence à l'ordre des appels de fonction. Donc, si vous avez un appel tel queMultiply(Five(), Six())
, les pseudo-variables suivantes sont créées:la source
Microsoft Visual C ++ le faisait auparavant, mais Visual Studio ne fonctionne pas AFAIK .. :(
la source
La seule façon que je sache est de placer un point d'arrêt sur la ligne de retour, puis d'appeler la fenêtre Quick Watch et d'entrer l'expression retournée:
Mais cela ne fonctionne que si l'appel ne change pas l'état d'un objet (car il y aura un deuxième appel à la même méthode lorsque vous reprendrez l'exécution).
la source
Vous pouvez également demander d'évaluer la valeur dans la fenêtre intermédiaire, si elle ne définit pas d'indicateurs ou d'autres variables, mais ne renvoie que quelque chose.
la source
Je pense que vous pouvez le déterminer en regardant le registre RAX dans la fenêtre Registers (Debug / Windows / Registers). Après avoir quitté (SHIFT + F11) de la fonction, vérifiez le registre RAX. Je ne sais pas pour un fait, mais une fois sur une lune, vous pouvez vérifier un registre (avant les jours .NET) et y voir la valeur de retour. Il peut même s'agir d'une combinaison de RAX et RBX, etc.
la source
L'ouverture de la fenêtre Débogage → Autos vous permet de fermer. Il ne montrera pas la valeur de retour réelle, mais il montrera ce qui a été évalué dans l'instruction de retour.
la source
return x + y;
Ce que je voulais dire, c'est que si vous définissez un point d'arrêt sur cette ligne, votre fenêtre Debug-Autos affichera les valeurs actuelles de x et y. Comme je l'ai dit, cela ne fait que vous rapprocher. J'essaie seulement d'aider. Je ne pense pas que cela mérite un downvote.Oui, en passant à VB.NET. ; P (Vous venez de dire "Visual Studio".;)
Aussi longtemps que je me souvienne (de Visual Basic à toutes les versions de VB.NET), vous pouvez simplement interroger le nom de la fonction. Il "fonctionne" comme une variable locale qui est implicitement déclarée au début de la fonction et sa valeur actuelle est également utilisée comme valeur de retour chaque fois que la fonction se termine via des moyens de déclaration non-retour (c'est-à-dire
Exit Function
-à- ou simplement en traversant) et bien sûr, lorsque l'instruction return est utilisée.Il est également défini sur l'expression de l'instruction return. Tout comme une variable locale, sa valeur peut être inspectée à n'importe quel point d'exécution à l'intérieur de la fonction (y compris après l'exécution de l'instruction return). C # n'a pas cela et devrait.
Cette petite fonctionnalité VB.NET (plus la
Exit Function
déclaration qu'elle active - une autre fonctionnalité que C # n'a pas et devrait) est très utile dans une forme de programmation défensive que je pratique où j'initialise toujours le nom de la fonction à la valeur d'échec / par défaut comme première déclaration. Ensuite, à n'importe quel point d'échec (qui se produit normalement beaucoup plus souvent que les points de réussite), je peux simplement appeler l'Exit Function
instruction (c'est-à-dire sans avoir à dupliquer l'expression d'échec / par défaut ou même un nom de constante / variable).la source
La réponse acceptée ne fonctionne pas correctement avec Visual Studio 2015, mais en plaçant un point d'arrêt sur la dernière ligne de la méthode et en appuyant sur F10, elle mettra toutes les expressions de la valeur de retour dans la fenêtre locale.
la source
Vous pouvez essayer de sélectionner
"someTableAdapter.getSomeData();"
, faire un clic droit dessus et opter pour Quick Watch .la source
Faites glisser et déposez l'expression de retour dans une fenêtre de surveillance.
Par exemple, dans la déclaration
glisser déposer
dans une fenêtre de surveillance, et vous verrez la valeur.
Vous pouvez le faire pour n'importe quelle expression.
la source