Ich habe eine Klasse mit einer Eigenschaft, und ich muss debuggind Auswertung abfangen.Wie Erkennung von IDE-Debugger zu erkennen
Und ich weiß nicht, wie ich das tun kann.
class Foo
{
public bool DebugIsAllow { get; set; } = false;
public string Value
{
get
{
if (!DebugIsAllow && IsDebugging()) throw new Exception();
return "ok";
}
}
public bool IsDebugging()
{
return ?????
}
public void Main()
{
var v = Value;
Breakpoint here !!!
DebugIsAllow = true;
Breakpoint here !!!
}
}
Beim ersten Haltepunkt, wenn ich Spion für 'v' und 'Value' hinzufügen, möchte ich in Ãœberwachungsfenster sehen: v = "ok" und Value = "Exception"
Und in zweiter Ich möchte im Watch-Fenster sehen: v = "ok" und Value = "ok"
Vielen Dank für Ihre Hilfe.
Edit:
ich mit "System.Diagnostics.Debugger.IsAttached" versuchen, aber aber Debugger ist immer angebracht. Nicht nur wenn die IDE-Klasseneigenschaft durch das Überwachungsfenster angezeigt wird.
Wir wissen nicht, warum Sie das tun müssen. Ziehen Sie in Erwägung, einen Obfuscator zu verwenden, um das Leben von jemandem zu erschweren. –
Verwenden Sie ggf. das Attribut "[DebuggerDisplay]" (https://msdn.microsoft.com/de-de/library/x810d419.aspx), um zu ändern, was in Visual Studio-Toolfenstern gerendert wird. Es ist jedoch nicht konzipiert für die Verschleierung verwendet werden, und es kann sowieso leicht herum gearbeitet werden. –
Es ist nicht für Obfuscator. In Wirklichkeit ist diese Eigenschaft mit einem Cache-System und einem Fernaufrufsystem verbunden. Und ich möchte nicht, dass der Debugger den Remote-Aufruf auslöst. Aber ich möchte erlauben, dass es Wert im Cache bekommt. Das Attribut [System.Diagnostics.DebuggerBrowsable] kann die Auswertung vollständig deaktivieren. Aber in diesem Fall kann ich leicht Wert im Cache bekommen ... –