2010-08-21 12 views
10

Spesso durante lo sviluppo con VS2010 Ultimate, voglio verificare in quale base di codice è stato impostato un valore (quindi, dove si tratta di un compito).Trovando tutti i luoghi è stata impostata una variabile?

C'è un modo, utilizzando VS2010 Ultimate, o uno strumento di debug di terze parti, per essere in grado di ottenere tutti i posti in una base di codici in cui è stata impostata o ottenuta una variabile?

+1

Cosa intendi per "variabile"? Più specificamente, stai includendo campi e proprietà o ti riferisci in modo specifico alle variabili locali del metodo? –

+0

@dotnetdev: Suggerisco di: a) rimuovere "o ottenuto" dalla domanda o b) cambiandolo per dire "imposta solo o ottenuto solo" rispetto a "impostato o ottenuto". Come è, la tua domanda (secondo l'inglese e le regole grammaticali di programmazione) significa che non ti importa se i riferimenti di lettura sono trovati anche * in aggiunta * per scrivere riferimenti (nel qual caso potresti semplicemente usare la funzione Trova tutti i riferimenti integrata di VS) . Sono abbastanza sicuro che stai cercando un modo per trovare i riferimenti di scrittura * solo *. – Tom

risposta

0

È possibile utilizzare il comando "Trova i riferimenti" (Ctrl + K, Ctrl + R)

-1

come chiesto Daniel Pratt sopra, io non sono sicuro se intendi proprietà, variabili o qualcos'altro. Tuttavia, una funzione correlata che uso molto è "Trova usi", che può essere raggiunta facendo clic con il tasto destro su metodi, classi, membri ecc. Che trova non solo assegnazioni, ma tutti gli usi - tuttavia forse lo restringerà abbastanza per te per setacciare manualmente dopo i compiti.

-1

A volte le vecchie tecniche diventano le migliori. può essere è possibile cercare intera soluzione con Ctrl + Shift + F

+0

Ctrl + Shift + F sarebbe utile. Ho usato per mantenere questo come sfondo del desktop. http://www.microsoft.com/downloads/details.aspx?FamilyID=92CED922-D505-457A-8C9C-84036160639F&displaylang=en HTH :) –

+0

-1. Questo troverà tutti i riferimenti, vale a dire sia quando il valore viene impostato o referenziato. –

+0

è anche peggio di "Find Usages" –

8

sì, c'è la funzione Value Origins che è disponibile in Reshaper 5.

Cercando l'intera soluzione con Ctrl + Shift + F o utilizzando Trova Usi come alcuni hanno suggerito di non rispondere alla domanda dell'OP - mostrerà ogni utilizzo della variabile, non solo gli incarichi, e scorrere questa lista può essere noioso e richiede molto tempo.

7

È possibile utilizzare CTRL + MAIUSC + F con espressione regolare: MyVariable [\ t \ r \ n \ v \ f] * = [^ =], questo cercherà "myVariable" a sinistra del " = "segno.

+1

Per VB.Net (poiché OP non ha specificato), questo mostrerà anche tutti i riferimenti dove c'è un controllo di uguaglianza, poiché VB.Net non usa il == . – Flater

+0

Cosa succede se quella variabile viene passata come parametro 'ref' o' out' su qualche altro metodo che la modifica? –

+0

Come te, 'variableName =' è quello che cerco nel codice la maggior parte delle volte, quando non ci sono 'ref' o' out' presenti. –

2

Disclaimer: io sono affiliati a OzCode

il debug È possibile aggiungere-on OzCode ha una funzione chiamata break-point Setter Setter break-point che colpisce quando una proprietà di un oggetto è cambiato.

enter image description here

0

Ecco una soluzione più robusta utilizzando Visual Studio senza attrezzi 3rd party:

1. Per tutti, tranne post/pre-fix di incremento e Shift Assegnazioni:

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

2. Per Incrementi Post Incremento/Pre-fix e assegnazioni di spostamento:

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

3. Per Out/Ref Parametri (N/A per Beni):

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

avvertimenti:

  1. C# .NET solo.
  2. Solo Visual Studio 2012+.
  3. Non funziona se "=" è seguito da un EOL.
  4. Non funziona se "MyVariable" è seguito da un EOL.
  5. A seconda del punto di partenza e dell'ambito del Trova e dell'ambito della variabile/Proprietà, è possibile trovare più/meno riferimenti del necessario. In caso di dubbio, errore sul lato di "altro", in modo da non perdere nulla.
  6. Non funziona per "." - Variabili/Proprietà con prefisso. 6.1. A meno che non lo includiate come parte di "MyVariable" (cioè "MyStructVariable.MyStructField" o "MyObjectVariable.MyObjectField") ma rischi di trovare troppi riferimenti poiché potrebbero esserci altre Struct o Variabili oggetto utilizzate per effettuare assegnazioni allo stesso Struct o Campo o proprietà dell'oggetto.
Problemi correlati