C# 如何通过IDE调试器检测评估
我有一个带有属性的类,我需要截获debuggind求值 我不知道我怎么能做到C# 如何通过IDE调试器检测评估,c#,debugging,C#,Debugging,我有一个带有属性的类,我需要截获debuggind求值 我不知道我怎么能做到 class Foo { public bool DebugIsAllow { get; set; } = false; public string Value { get { if (!DebugIsAllow && IsDebugging()) throw new Exception(); retu
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 !!!
}
}
在第一个断点处,如果我为“v”和“Value”添加spy,我希望在监视窗口中看到:v=“ok”和Value=“Exception”
在第二个断点,我想在手表窗口中看到:v=“ok”和Value=“ok”
谢谢你的帮助
编辑:
我尝试使用“System.Diagnostics.Debugger.IsAttached”,但调试器总是附加的。不仅当IDE类属性按监视窗口显示时。如果定义了调试常量,则可以使用此编译器指令:
public bool IsDebugging()
{
#if DEBUG
return true;
#else
return false;
#endif
}
使用
[DebuggerDisplay]
属性来实现在调试器中使用的自定义显示方案。例如,Lazy
类使用它来停止调试,从而导致延迟计算运行
不,它不起作用。“DEBUG”constante只会说它编译为DEBUG或release。如果这是正常的执行或IDE调试调用,就不需要了……我们不知道您为什么需要这样做。考虑使用混淆器来让某人的生活变得更加困难。如果相关的话,考虑使用<代码> [调试程序显示] < /Cord>属性()来改变VisualStudio工具窗口中所呈现的内容,但是它不是被设计用于混淆的,而且它可以很容易地工作。这不是混淆器。实际上,该属性与缓存系统和远程调用系统相连。我不想让调试器触发远程调用。但我希望允许它在缓存中获取值。[System.Diagnostics.DebuggerBrowsable]属性可以完全禁用评估。但在这种情况下,我可以很容易地在缓存中获取值……最后,我想我将使用DebuggerTypeProxy属性。但是它仍然是黑客的一部分,因为在我的例子中,求值太慢了,如果另一个类使用这个属性,它将不会利用这个属性,我将在IDE中出错。并且不会在所有类上添加此属性。。。