2013-04-10 5 views
5

Ich habe die folgenden zwei Codezeilen:C#: VS 2008 Debugger Ausführung Fewokode

lstvbWerteC.Clear(); 
if (...) 

lstvbWerteC ist ein Bereich der Liste <T> mit Klassenbereich. Wenn ich im VS 2008 Debugger einen Haltepunkt für die if-Anweisung setze, würde ich erwarten, dass lstvbWerteC.Count 0 ist, aber stattdessen ist es 1. Meine Klasse hat einige Eigenschaften, die tatsächlich die Liste füllen. Um Nebenwirkungen im Debugger zu verhindern, haben alle Eigenschaften das Attribut [DebuggerBrowsable (DebuggerBrowsableState.Never)]. Sobald jedoch das lokale Fenster sichtbar ist, scheint der Debugger den Code auszuführen, der die Liste ausfüllt. Wenn das lokale Fenster ausgeblendet ist, ist die Liste immer leer und erreicht den if-Haltepunkt. Alle Informationen zu Debugger-Details, die diese Art von Problem betreffen, sind willkommen.

Antwort

5

Visual Studio-Menü: Extras - Optionen - Debuggen - Allgemein. Deaktivieren Sie die Option "Eigenschaftenbewertung aktivieren".

Dies ist von Visual Studio 2010. Visual Studio 2008 sollte die gleiche Option oder etwas ähnliches haben.

1

Ich würde mir vorstellen, dass das Verhalten, das Sie beschreiben, in den meisten Dokumentationen undefiniert ist. Natürlich gibt es keine Anforderung als jeder Debugger (VS enthalten!) Sollte das DebuggerBrowsable Attribut ehren. Darüber hinaus garantiert das Fehlen von Anzeige eines Elements in einem Debug-Fenster nicht unbedingt, dass das Element nicht von dem Debugger ausgewertet wird.

Es gibt eine Option unter den Debugging-Optionen mit dem Namen "Enable Property Evaluation", die Ihrem speziellen Fall helfen kann oder auch nicht, aber im Allgemeinen würde ich sagen, dass Sie sich nicht darauf verlassen können.

Es gibt einen häufig wiederholten Ratschlag: "Eigenschaftengetter sollten keine [sichtbaren] Nebenwirkungen haben." Ihre Property Getters Do haben Nebenwirkungen, und das verursacht Probleme mit Ihrer Debugging-Erfahrung, aber es macht möglicherweise auch Ihre Klasse als Ganzes weniger verständlich für andere Entwickler. Mein Rat wäre, ein Redesign in Erwägung zu ziehen, das den Inhalt der Liste nicht ändert, wenn man einen Eigenschaftswert erhält.

+0

+1 für "Eigenschaft Getter sollte nicht [sichtbare] Nebenwirkungen haben". –