有什么方法可以检测到调试器是否在内存中运行?
这是表单加载伪代码。
if debugger.IsRunning then
Application.exit
end if
编辑:原标题是“Detecting an in memory debugger”
尝试以下
if ( System.Diagnostics.Debugger.IsAttached ) {
...
}
在使用它关闭在调试器中运行的应用程序之前要记住两件事:
现在,为了更有用,这里是如何使用此检测来防止调试器中的func eval更改您的程序状态,如果您出于性能原因缓存了一个延迟评估的属性。
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;
}
}
我有时也使用此变体来确保我的调试器逐步执行不会跳过评估:
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;
}
}