在调试器下运行时更改程序流

时间:2009-08-25 19:34:06

标签: .net debugging in-memory cracking

有没有办法检测调试器是否在内存中运行?

这里是关于Form Load伪代码的。

if debugger.IsRunning then
Application.exit
end if

编辑:原始标题是“检测内存调试程序”

2 个答案:

答案 0 :(得分:33)

尝试以下

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

答案 1 :(得分:5)

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

  1. 我使用调试器从商业.NET应用程序中提取崩溃跟踪并将其发送到随后修复的公司,并感谢您使其变得简单
  2. 该支票可以琐碎击败。
  3. 现在,为了更有用,下面是如何使用此检测来使调试器中的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;
        }
    }