460 votes

Puis-je trouver la valeur de retour avant de revenir lors du débogage dans Visual Studio

Prenez la fonction suivante:

 DataTable go()
{
  return someTableAdapter.getSomeData();
}
 

Lorsque je définis un point d'arrêt dans cette fonction, y a-t-il une possibilité d'inspecter la valeur retournée? La fonction "go" est directement couplée à une grille de données dans une page aspx.

La seule façon d'inspecter le datatable retourné, est d'utiliser une variable temporaire ... Cependant, c'est un peu gênant. N'y a-t-il pas un autre moyen?

328voto

Marc Gravell Points 482669

Pas que je sache de. Notez que si vous ajoutez une variable, il va être supprimée par le compilateur dans la version construit de toute façon ...

Cette fonction a été ajoutée à VS2013 où vous pouvez voir toutes les valeurs de retour dans la fenêtre autos (seulement un support limité pour les structures) ou en utilisant $ReturnValue dans la fenêtre immédiate.

57voto

Alex Angas Points 20408

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 #.

(VS2008 et les versions antérieures le supportaient pour VB.NET, il a toujours été disponible pour les développeurs C / C ++.)

26voto

Omer Raviv Points 4100

Je suis d'accord que c'est une chose très utile: non seulement de voir la valeur de retour de la méthode avant de sortir, mais aussi de voir la valeur de retour des méthodes je viens de enjamba. J'ai mis en œuvre dans le cadre d'une extension commerciale de Visual Studio appelé "BugAid" que je fais avec un ami, actuellement en version bêta.

Avec elle, vous pouvez afficher les valeurs de retour des méthodes à droite sur l'éditeur de code, comme une sorte de PALETTE de l'affichage, comme dans cette capture d'écran:

Statement Visualization

Pour plus d'informations, veuillez consulter mon blog à propos de cette fonctionnalité.

25voto

Dan Solovay Points 1781

Selon Microsoft, il n'existe aucun moyen pour mettre en œuvre cette manière fiable avec le code managé. C'est un problème qu'ils connaissent et travaillent sur:

Pour ceux qui ont une expérience de débogage de code C++ ou code VB6, vous pouvez avoir utilisé une fonctionnalité où les valeurs de retour de fonction sont fournis pour vous dans les Autos de la fenêtre. Malheureusement, cette fonctionnalité n'existe pas pour le code managé. Alors que vous pouvez contourner ce problème en attribuant les valeurs de retour d'une variable locale, ce n'est pas aussi pratique car il nécessite la modification de votre code. Dans le code managé, c'est beaucoup plus délicat à déterminer quelle est la valeur de retour d'une fonction que vous avez franchi. Nous avons réalisé que nous ne pouvions pas faire la bonne chose constante, ici et nous avons donc supprimé la fonctionnalité plutôt que de vous donner des résultats incorrects dans le débogueur. Cependant, nous voulons apporter ce retour pour vous et notre CLR et Débogueur équipes sont à la recherche à un certain nombre de solutions possibles à ce problème. Malheureusement, ce ne sera pas une partie de Visual Studio 11.

https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code

13voto

Ross Buggins Points 98

Si vous allez à options, IntelliTrace, et modifiez le paramètre pour recueillir les événements et les informations d'appel. Vous pouvez revenir à l'appel précédent de l'événement (Ctrl+Maj+F11) et de voir le temporaire de la valeur retournée par l'appel de la méthode dans les autos de la fenêtre comme un enfant du nom de la méthode.

Ce n'est pas de vous montrer la valeur de retour de la méthode que vous êtes, il vous montre la valeur de retour de la dernière méthode appelée dans la méthode actuelle.

Donc, c'est bien pour:

DataTable go(){return someTableAdapter.getSomeData();}

comme il vous montre la valeur de retour de someTableAdapter.getSomeData()

mais pas pour:

int go(){return 100 * 99;}

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