2009-06-26 4 views
15

Ich habe ein Objekt Ich muss eine Funktionsausgabe von ziemlich vielen Zeiten durch das Überwachungsfenster beobachten. Das Problem ist, dass ich die Refresh-Taste jedes Mal drücken muss, wenn ich Schritt, weil "dieser Ausdruck verursacht Nebenwirkungen und wird nicht ausgewertet werden". Gibt es eine Möglichkeit, eine Funktion mit etwas wie [DoesNotCauseSideEffects] zu versehen, damit die Uhr sie automatisch jedes Mal auswerten kann, wenn ich einen Schritt mache?Visual Studio: Machen Sie den Debugger darauf aufmerksam, dass eine Funktion keine "Nebeneffekte" verursacht

Ich bin Codierung C# in VS2008 oder 2010

Edit:. Die Funktion sieht wie folgt aus und tut, wie man sehen kann, keine Nebenwirkungen verursachen (x, y, z sind alle Doppel)

public override string ToString() 
{ 
    return "{ " + x.ToString(".00") + ", " + y.ToString(".00") + ", " + z.ToString(".00") + "}"; 
} 
+0

Vielleicht, wenn Sie den Ausdruck und/oder Code Auszüge enthalten, könnten wir Ihnen sagen, warum es das denkt. –

Antwort

3

Nein, das ist nicht möglich. Die Bestimmung, ob eine Funktion Nebenwirkungen hat oder nicht, wird tatsächlich von dem sprachspezifischen Ausdruckauswerter vorgenommen.

Sowohl C# als auch VB.Net haben unterschiedliche EE und jeder hat seine eigene Bestimmung, ob nicht eine Funktion Nebenwirkungen verursacht. Im Allgemeinen betrachten beide jedoch einen expliziten Funktionsaufruf als Nebeneffekte und werden sie nicht in Situationen wie dem Stepping verarbeiten, bei denen der Debugger Nebenwirkungen deaktivieren möchte.

Der einfachste Weg, um dies zu umgehen, ist jedoch eine Eigenschaft zu verwenden. Standardmäßig werden Eigenschaftsinstanzen nicht als Nebeneffekte betrachtet und sie werden in Schritt ausgewertet.

EDIT

wollte ein paar Missverständnisse klären. Weder der Debugger noch der Expression-Evaluator führt eine Art von Methodenprüfung durch, um festzustellen, ob eine Funktion Nebenwirkungen hat. Sie merken einfach das Vorhandensein einer Funktion an und beschriften sie als potentiell mit Nebenwirkungen. Sie versuchen nicht, den Code der Methode in irgendeiner Weise zu überprüfen.

+1

Diese Antwort scheint ** COMPLETEY INCORRECT ** zu sein. Überprüfen Sie die Antwort unten; Sie können an den Watch-Ausdruck ", ac" anhängen und er wird den Debugger zwingen, ihn automatisch neu zu bewerten. – Jez

+0

@Jez, dass die Arbeit nicht universell ist. Es funktioniert zwar für C#, aber nicht für VB.Net – JaredPar

+4

Umso mehr Gründe, VB nicht zu verwenden.NET ;-) – Jez

-2

Haben Sie versucht, es so zu machen, dass die Funktion keine Klasseneigenschaften oder globale Variablen ändert? Meine Offline-Definition von "Nebenwirkungen" ist "Änderungen an der Ausführungsumgebung, die während der Ausführung einer Funktion vorgenommen werden". So bewirkt diese Funktion Nebenwirkungen:

void addValues(int operand1, int operand2) { 
    globalSum = operand1 + operand2; 
} 

aber diese Funktion nicht:

int addValues(int operand1, int operand2) { 
    return operand1 + operand2; 
} 

Es ist immer besser, um Nebenwirkungen, wann immer möglich zu vermeiden. Sie können Probleme beim Debuggen verursachen. Siehe this wikipedia article.

+0

Das geht nicht. Die EE versuchen nicht, die Funktion in irgendeiner Weise zu überprüfen, sie merken einfach an, dass es keine Eigenschaft ist und bezeichnen sie als potentiell mit Nebenwirkungen. – JaredPar

19

Sie können ,ac an die Uhr Ausdruck hängen Sie ihn automatisch den Wert aktualisieren haben: für weitere Informationen und andere format specifiers

x.ToString(),ac 

Siehe MSDN.

Verwandte Themen