2010-08-21 5 views
10

Souvent lors du développement avec VS2010 Ultimate, je veux vérifier où une valeur est définie dans une base de code (donc là où c'est une affectation).Trouver tous les endroits où une variable a été définie?

Existe-t-il un moyen, en utilisant VS2010 Ultimate, ou un outil de débogage tiers, d'obtenir toutes les places dans une base de code où une variable a été définie ou obtenue?

+1

Qu'entendez-vous par «variable»? Plus spécifiquement, incluez-vous des champs et des propriétés, ou faites-vous spécifiquement référence aux variables locales? –

+0

@dotnetdev: Je suggère soit: a) de supprimer le "ou obtenu" de votre question ou b) de le changer pour dire "définir seulement ou avoir seulement" vs "définir ou obtenu". En l'état, votre question (selon l'anglais et les règles de grammaire de programmation) signifie que vous ne vous souciez pas de lire des références * en plus * pour écrire des références (auquel cas vous pouvez simplement utiliser la fonctionnalité intégrée de recherche de VS) . Je suis sûr que vous cherchez un moyen de trouver des références d'écriture * seulement *. Ctrl + Maj + F serait pratique. – Tom

Répondre

0

Vous pouvez utiliser la commande "Trouver des références" (Ctrl + K, Ctrl + R)

-1

Comme Daniel Pratt a demandé ci-dessus, je ne suis pas sûr que vous voulez dire des propriétés, variables ou autre chose. Cependant, une fonction connexe que j'utilise beaucoup est "Find Usages", qui peut être atteinte par un clic droit sur les méthodes, les classes, les membres etc. Cela trouve non seulement des affectations, mais toutes les utilisations - mais peut-être passer au crible manuellement après les affectations.

-1

Parfois, les anciennes techniques deviennent les meilleures. Peut être que vous pouvez rechercher la solution entière avec CTRL + Maj + F

+0

J'avais l'habitude de garder cela comme fond d'écran. http://www.microsoft.com/downloads/details.aspx?FamilyID=92CED922-D505-457A-8C9C-84036160639F&displaylang=en HTH :) –

+0

-1. Ceci trouvera toutes les références, c'est-à-dire quand la valeur est en train d'être définie ou en cours de référence. –

+0

aussi c'est encore pire que "Find Usages" –

8

Oui, il y a la fonction Value Origins qui est disponible dans Reshaper 5.

Recherche toute solution avec Ctrl + Maj + F ou en utilisant Trouver Usages comme Certains ont suggéré de ne pas répondre à la question de l'OP - elle montrera chaque utilisation de la variable, pas seulement les affectations, et passer cette liste peut être fastidieux et fastidieux.

7

Vous pouvez utiliser CTRL + MAJ + F avec l'expression régulière: MyVariable [\ t \ r \ n \ v \ f] * = [^ =], cela va rechercher la "myVariable" à gauche de la " = "signe".

+1

Pour VB.Net (puisque OP n'a pas spécifié), cela affichera aussi toutes les références où il y a un contrôle d'égalité, puisque VB.Net n'utilise pas le == . – Flater

+0

Que faire si cette variable est passée en paramètre 'ref' ou' out' à une autre méthode qui le modifie? –

+0

Comme vous, 'variableName =' est ce que je recherche dans le code la plupart du temps, quand il n'y a pas de 'ref' ou' out' présent. –

2

Disclaimer: Je suis affilié à OzCode

Vous pouvez le Debugging add-on OzCode il a une fonctionnalité appelée point de rupture Setter Setter point de rupture qui frappe quand une propriété d'un objet a changé.

enter image description here

0

Voici une solution plus robuste en utilisant Visual Studio sans outils 3ème partie:

1. Pour tous, sauf Post-/pré-fix Increment et Shift missions:

(^|[^\w.])MyVariable\s*([\+\-\*/%&|\^]|)=[\w\s] 

2. Pour les affectations de décalage et de changement de position et de préfixe:

((^|[^\w.])MyVariable\s*(\+\+|--)|(\+\+|--)\s*MyVariable[^\w.]|(^|[^\w.])MyVariable\s*(<<|>>)=) 

3. Pour Out/Ref Paramètres (N/A pour Propriétés):

(^|[^\w.])(out|ref)\s+MyVariable[^\w.] 

: CAVEATS

  1. C# .NET uniquement.
  2. Visual Studio 2012+ uniquement.
  3. Ne fonctionne pas si "=" est suivi d'un EOL.
  4. Ne fonctionne pas si "MyVariable" est suivi d'un EOL.En fonction du point de départ et de la portée de la recherche et de la portée de la variable/propriété, il est possible de trouver plus/moins de références que nécessaire. En cas de doute, erreur du côté de "plus", afin que vous ne manquiez de rien.
  5. Ne fonctionne pas pour les variables/propriétés "." - préfixées. 6.1. À moins que vous ne l'incluiez dans MyVariable (c'est-à-dire «MyStructVariable.MyStructField» ou «MyObjectVariable.MyObjectField»), vous risquez de ne pas trouver suffisamment de références car d'autres variables Struct ou Object peuvent être utilisées pour effectuer des affectations sur le même Struct ou Champ ou propriété d'objet.
Questions connexes