Zwei Dinge im Auge zu behalten, bevor diese mit Ausführen einer Anwendung schließen im Debugger:
- Ich habe einen Debugger verwendet, um AC zu ziehen Rash Trace von einer kommerziellen .NET-Anwendung und senden Sie es an die Firma, wo es nachträglich mit einem Dankeschön für die Herstellung es einfach und
- behoben wurde Diese Überprüfung kann trivial besiegt werden.
Nun, mehr Nutzen zu sein, hier ist, wie diese Erkennung verwenden func eval im Debugger zu halten von Ihrem Programmzustand zu ändern, wenn Sie einen Cache eine träge ausgewertete Eigenschaft aus Performance-Gründen haben.
private object _calculatedProperty;
public object SomeCalculatedProperty
{
get
{
if (_calculatedProperty == null)
{
object property = /*calculate property*/;
if (System.Diagnostics.Debugger.IsAttached)
return property;
_calculatedProperty = property;
}
return _calculatedProperty;
}
}
habe ich auch diese Variante manchmal verwendet meine Debugger Schritt-durch, um sicherzustellen, ist die Auswertung nicht überspringen:
kann
private object _calculatedProperty;
public object SomeCalculatedProperty
{
get
{
bool debuggerAttached = System.Diagnostics.Debugger.IsAttached;
if (_calculatedProperty == null || debuggerAttached)
{
object property = /*calculate property*/;
if (debuggerAttached)
return property;
_calculatedProperty = property;
}
return _calculatedProperty;
}
}
Die meisten Debugger an einen Prozess zur Laufzeit gebunden sein. In diesem Fall hilft die Überprüfung auf Debugger auf statrup nicht viel. –