5 votes

Existe-t-il un moyen de déboguer VB.NET avec clause dans Visual Studio ?

Parfois, vous ne vous souciez pas vraiment du nom d'une variable, car elle ne sort pas du champ d'application de votre sous-programme. En fait, spécifier le nom ajouterait une ligne de code supplémentaire. De plus, vous devez maintenant vous occuper de ce nom, ce qui peut ajouter à l'effort de refactoring potentiel (si vous décidez de le renommer plus tard). Jetez un coup d'oeil au code ci-dessous :

Dim fileInfo As New FileInfo("filename.txt")
With New FileSystemWatcher
  .Path = fileInfo.DirectoryName
  .Filter = fileInfo.Name
  .EnableRaisingEvents = True
  AddHandler .Changed, AddressOf OnChanged
End With

Il s'agit d'une construction VB.NET parfaitement valide, qui semble propre et nette. Cependant, lorsqu'il s'agit de déboguer, et en supposant que vous placez un point d'arrêt à l'intérieur de la balise With il n'y a pas d'option pour saisir cette .Path pour s'assurer qu'il a été réglé correctement.

Est-ce que j'ai raté quelque chose ici ou est-ce que Visual Studio ne fournit vraiment pas de débogage pour .Property syntaxe à l'intérieur With déclarations ? J'utilise l'année 2010.

Évidemment, il n'y a pas grand-chose à déboguer dans le code ci-dessus, mais il peut y avoir de nombreux exemples de cas où une telle sans nom With serait utile.

BTW, nommé With ont le même problème, c'est-à-dire que si je devais écrire :

Dim fsw As New FileSystemWatcher
With fsw
  .Path = fileInfo.DirectoryName
  .Filter = fileInfo.Name
  .EnableRaisingEvents = True
  AddHandler .Changed, AddressOf OnChanged
End With

Je n'arrive toujours pas à tirer la valeur de .Path en devant toujours le faire précéder de fsw .

Le problème prend de l'ampleur au fur et à mesure que l'on s'imbrique. With les unes dans les autres.

3voto

Hans Passant Points 475940

L'instruction With avec une variable non nommée est un formidable défi pour le débogueur, il n'y a pas de solution de rechange. Il n'y a rien de mal à utiliser une petite variable d'aide nommée comme "fsw", elle existe de toute façon, générée automatiquement par le compilateur. Ce qui n'est pas sans nom, juste innommable. Comme VB$t_ref$L0) le débogueur ne vous laissera pas le saisir, car il utilise des caractères qui ne sont pas valides dans les noms d'identifiants VB.NET. C'est intentionnel, cela permet de s'assurer qu'il n'entre jamais en collision avec un nom que vous avez utilisé. Cela l'empêche également d'apparaître dans la fenêtre Autos.

Vous avez déjà trouvé la solution de contournement appropriée en nommant la variable. Le débogage à partir de là est simple, il suffit de passer la souris sur le nom de la variable, et non sur le nom du champ. Et bien sûr, cela fonctionne bien dans toutes les autres fenêtres du débogueur, la fenêtre Autos en particulier s'animera. Et n'hésitez pas à abandonner l'instruction With au profit de l'écriture complète de l'instruction, IntelliSense vous aide beaucoup. lot pour que ce soit moins une corvée.

0voto

Alex Andre' Points 1

Une option serait d'ajouter ces variables à la liste de surveillance et de visualiser les valeurs dans la fenêtre de surveillance.

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