Wie finde ich Variablen, die außerhalb des aktuellen Bereichs in C # definiert sind?

9

Ich benutze Visual Studio 2013. Ich überarbeite irgendeinen schrecklichen Code, der von jemand anderem hinterlassen wurde, der fast ausschließlich globale Variablen verwendet, und versuche, das zu bereinigen, damit ich jede Funktion ordnungsgemäß verkapseln kann und keine Effekte außerhalb verursachen kann von dem, was in es hineingegangen ist (oder von ihm zurückgekehrt ist).

Gibt es eine Möglichkeit, das gesamte Projekt auf einfache Weise auf Variablen zu überprüfen, die außerhalb des Geltungsbereichs definiert sind?

Ich weiß, dass ich auf eine Variable klicken kann, und SHIFT+F12 wird mich für diese individuelle Variable finden, aber ich würde gerne solche Verwendungen im gesamten Projekt finden, weil das Problem WIRKLICH schlecht ist ... das ist es nicht nur ein oder zwei globale Variablen, ich spreche Dutzende. Der Versuch, den Ablauf dieses Programms und seinen Zustand zu verstehen, reicht aus, um Sie stark zu trinken zu lassen!

    
eidylon 02.07.2015, 20:31
quelle

1 Antwort

1

Es sollte ein Werkzeug geben, das dies bereits in einem Baumformat tut, aber keiner der üblichen Verdächtigen scheint es ohne den Find Usages-Tanz zu haben.

Hier ist ein Versuch, die Reflection-APIs zu verwenden, indem Sie alle Elementvariablen finden, dann die Methoden durchgehen und herausfinden, ob sie sie berühren.

Sie betrachten IL im Grunde zu diesem Zeitpunkt. Wenn Sie also die Parser-Regeln nicht selbst bestimmen wollen, sollten Sie einen Disassembler wie Cecil verwenden. Ich verwende diese veraltete Implementierung einer einzelnen Datei, weil es einfach ist . Etwas wie ein Roslyn Analyzer oder JustDecompile Plugin wäre eine andere Route, aber ich habe dort keine Erfahrung.

Es gibt Grenzfälle, und wenn Sie nach einem vollständigen Abhängigkeitsgraphen suchen, wird der Code viel komplexer sein - aber für eine schnelle und schmutzige Analyse sollte er Ihnen wenigstens einen Überblick verschaffen.

Also, im Grunde verwenden Sie Reflection plus einen IL-Reader, um eine Karte aus der Variablen - & gt; Methoden (Sie könnten auch anders herum gehen, aber das ist wahrscheinlich weniger wertvoll):

%Vor%

Unser Ergebnis wird wie folgt aussehen:

%Vor%

, das als "state3" gelesen wird, wird von "Method1" einmal und "Method2" zweimal verwendet.

    
Mark Brackett 02.07.2015 21:32
quelle