调试器下运行时更改程序流程(Changing the program flow when runni

2019-07-03 17:13发布

是否存在的检测调试器运行在内存中的任何方式?

这里谈到的表格载伪代码。

if debugger.IsRunning then
Application.exit
end if

编辑:原题是“发现一个已经在内存中的调试器”

Answer 1:

请尝试以下

if ( System.Diagnostics.Debugger.IsAttached ) {
  ...
}


Answer 2:

有两两件事要记住使用该关闭的调试器中运行应用程序之前:

  1. 我用调试器来从商业.NET应用程序拉碰撞痕迹,并将其发送给所在公司随后相继固定用感谢您使我们很容易和
  2. 这种检查可以平凡击败。

现在,要多用,这里是如何使用这种检测,以保持函数计算在调试器来改变你的程序的状态,如果你有一个缓存性能原因,懒洋洋地评估物业。

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;
    }
}


文章来源: Changing the program flow when running under a debugger