2009-11-19 4 views
2

Je place généralement dans les valeurs de variables qui ne sont utilisées qu'une fois après l'affectation. Je fais ceci pour rendre le débogage plus pratique plus tard, car je suis capable de planer la valeur sur la ligne où elle est utilisée plus tard.Comment éviter les variables de débogueur uniquement?

Par exemple, ce code ne vous permet pas de la valeur placez le curseur getFoo():

return GetFoo(); 

Mais ce code ne:

var foo = GetFoo(); 
return foo; // your hover-foo is great 

Cette odeurs très YAGNIesque, comme la fonctionnalité de l'affectation foo ne sera jamais utilisé jusqu'à ce que quelqu'un doive déboguer sa valeur, ce qui peut n'arrive jamais. Si ce n'était pas pour la session de débogage simplement prévue, le premier extrait de code ci-dessus conserve le code plus simple.

Comment écrivez-vous le code le mieux compromis entre la simplicité et la facilité d'utilisation du débogueur?

Répondre

2

Je ne connais pas d'autres débogueurs, mais le débogueur Visual Studio intégré rapportera ce qui a été renvoyé par une fonction dans la fenêtre "Autos"; Une fois que vous avez passé l'instruction return, la valeur renvoyée s'affiche sous la forme "[nom de la fonction] renvoyé" avec la valeur de la valeur renvoyée.

gdb prend également en charge la même fonctionnalité; la commande "finish" exécute le reste de la fonction en cours et imprime la valeur de retour.

Ceci étant une fonctionnalité très utile, je serais surpris si la plupart des autres débogueurs ne prenaient pas en charge cette fonctionnalité. En ce qui concerne le "problème" plus général des "variables de débogueur uniquement", sont-elles vraiment uniquement celles du débogueur? J'ai tendance à penser que l'utilisation de variables temporaires bien nommées peut également améliorer considérablement la lisibilité du code.

+0

Excellent conseil. Je vous remercie. L'exemple de 'retour' est juste cela - un seul exemple ... de quand je fais cela. Mais, plus souvent l'outil (par exemple IDE) peut me donner les informations dont j'ai besoin sans avoir à écrire du code uniquement pour le débogage ... moins je devrais écrire du code qui n'est utilisé que dans le débogage! – lance

+0

Oh, c'est pour ça que ça roule! Gosh, nous avons besoin d'un guide pour tous les outils de débogage Visual Studio affichés ... –

+0

Les techniques "Autos" fonctionne pour C++, pas pour C#. Voir http://stackoverflow.com/questions/268048/can-i-find-out-the-return-value-before-returning-while-debugging-in-visual-studio –

1

Une autre possibilité consiste à apprendre suffisamment de programmation d'assemblage pour pouvoir lire le code généré par le compilateur. Avec cette compétence, vous pouvez déterminer où la valeur est détenue (dans un registre, en mémoire) et voir la valeur sans avoir à la stocker dans une variable.

Cette compétence est très utile si vous avez besoin de déboguer un exécutable optimisé. L'optimiseur peut générer du code sensiblement différent de la façon dont vous l'avez écrit, de sorte que le débogage symbolique n'est pas utile.

1

Une autre raison pour laquelle vous n'avez pas besoin de variables intermédiaires dans le débogueur Visual Studio est que vous pouvez évaluer la fonction dans la fenêtre Espion et la fenêtre Exécution. Pour la fenêtre de surveillance, il suffit de surligner la déclaration que vous souhaitez évaluer et faites-la glisser dans la fenêtre.

1

Je dirais que cela ne vaut pas la peine de s'inquiéter. Étant donné qu'il n'y a pas de temps d'exécution dans le cas typique, allez fou. Je pense que la décomposition des instructions complexes en plusieurs instructions simples augmente généralement la lisibilité.

1

Je laisserais de côté l'affectation jusqu'à ce que cela soit nécessaire. Si vous n'êtes jamais dans ce morceau de code, en voulant regarder cette variable, vous n'avez pas encombré votre code inutilement.Lorsque vous rencontrez le besoin, mettez-le dans (il devrait être un Extraire Variable refactoring). Et lorsque vous avez terminé cette session de débogage, supprimez-le (Variable en ligne). Si vous vous trouvez à déboguer tellement - et tellement à ce point particulier - que vous êtes fatigué de refactoriser d'avant en arrière, puis réfléchir à des moyens d'éviter le besoin; peut-être que plus de tests unitaires aideraient.

Questions connexes