2010-08-21 17 views
10

A menudo, al desarrollar con VS2010 Ultimate, quiero verificar en qué parte de una base de código se está estableciendo un valor (por lo tanto, cuando se trata de una tarea).¿Encontrando todos los lugares donde se ha establecido una variable?

¿Hay alguna manera, mediante VS2010 Ultimate, o una herramienta de depuración de terceros, de poder obtener todos los lugares en una base de código donde se ha establecido o obtenido una variable?

+1

¿Qué quiere decir con 'variable'? Más específicamente, ¿está incluyendo campos y propiedades, o se refiere específicamente a variables de método local? –

+0

@dotnetdev: sugiero: a) eliminar el "o haber recibido" de su pregunta ob) cambiarlo para decir "establecer solo o obtener solo" frente a "establecer o obtener". Como es, tu pregunta (de acuerdo con las reglas de gramática de programación y de inglés) significa que no te importa si también se encuentran las referencias de lectura * además de las referencias de escritura (en cuyo caso puedes usar la función de Buscar todas las referencias de VS) . Estoy bastante seguro de que estás buscando una forma de encontrar referencias de escritura * solo *. – Tom

Respuesta

0

Puede utilizar el comando "Encuentra referencias" (Ctrl + K, Ctrl + R)

-1

Como preguntó Daniel Pratt anteriormente, no estoy seguro de si nos referimos a propiedades, variables o algo más. Sin embargo, una función relacionada que uso mucho es "Buscar usos", a la que se puede acceder haciendo clic con el botón secundario en los métodos, clases, miembros, etc. No solo encuentra asignaciones, sino todos los usos, aunque quizás eso lo limite lo suficiente. para tamizar manualmente después de las asignaciones.

-1

A veces las técnicas antiguas se vuelven las mejores. puede ser usted puede buscar solución completa con CTRL + Shift + F

+0

Ctrl + Shift + F sería útil. Solía ​​mantener esto como fondo de escritorio. http://www.microsoft.com/downloads/details.aspx?FamilyID=92CED922-D505-457A-8C9C-84036160639F&displaylang=en HTH :) –

+0

-1. Esto encontrará todas las referencias, eso es tanto cuando se establece el valor como cuando se hace referencia a él. –

+0

también es peor que solo "Buscar usos" –

8

Sí, no es la característica Value Origins que está disponible en Remodeladora 5.

Buscando la solución completa con Ctrl + Shift + F o usando Encuentra Usos como algunos han sugerido que no responde la pregunta de OP: mostrará cada uso de la variable, no solo las asignaciones, y pasar rápidamente por esa lista puede ser tedioso y lento.

7

Puede usar CTRL + MAYÚS + F con la expresión regular: MiVariable [\ t \ r \ n \ v \ f] * = [^ =], esto buscará el "myVariable" a la izquierda del " = "signo.

+1

Para VB.Net (ya que OP no especificó), esto también mostrará todas las referencias donde haya una comprobación de igualdad, ya que VB.Net no usa el == . – Flater

+0

¿Qué pasa si esa variable se pasa como parámetro 'ref' o' out' a algún otro método que la modifique? –

+0

Como tú, 'variableName =' es lo que busco en el código la mayoría de las veces, cuando no hay 'ref' o' out' presente. –

2

responsabilidad: estoy afiliado con OzCode

Puede depuración del complemento OzCode que tiene una característica llamada Setter Setter punto de ruptura punto de ruptura que llega cuando una propiedad de un objeto cambia.

enter image description here

0

Aquí es una solución más robusta utilizando Visual Studio sin herramientas de 3 ª parte:

1. Para todos excepto Incremento Post/Pre-fix y Shift misiones:

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

2. Para las asignaciones de incrementos y cambios post/prerreglo:

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

3. Para parámetros OUT/Ref (N/A para Propiedades):

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

salvedades:

  1. C# solamente .NET.
  2. Visual Studio 2012+ solamente.
  3. No funciona si a "=" le sigue un EOL.
  4. No funciona si a "MyVariable" le sigue un EOL.
  5. Según el punto de inicio y el alcance de la búsqueda y el alcance de la variable/propiedad, puede encontrar más/menos referencias de las necesarias. En caso de duda, error en el lado de "más", por lo que no se perderá nada.
  6. No funciona para "." - Variables/Propiedades prefijadas. 6.1. A menos que lo incluya como parte de "MyVariable" (es decir, "MyStructVariable.MyStructField" o "MyObjectVariable.MyObjectField"), pero corre el riesgo de encontrar muy pocas referencias, ya que puede haber otras variables Struct o Object utilizadas para realizar asignaciones al mismo Struct o Campo o propiedad del objeto.
Cuestiones relacionadas