Изменение потока программы при работе под отладчиком

Есть ли способ обнаружить, что отладчик работает в памяти?

и здесь появляется псевдокод Form Load.

if debugger.IsRunning then
Application.exit
end if

Изменить: Оригинальное название: "Обнаружение отладчика в памяти"

Ответы

Ответ 1

Попробуйте выполнить

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

Ответ 2

Прежде чем использовать это, нужно закрыть две вещи, чтобы закрыть приложение, запущенное в отладчике:

  • Я использовал отладчик, чтобы вытащить трассировку сбоя из коммерческого приложения .NET и отправить ее в компанию, где впоследствии была исправлена ​​благодарность за упрощение и
  • Эта проверка может быть тривиально побеждена.

Теперь, чтобы быть более полезным, здесь, как использовать это обнаружение, чтобы 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;
    }
}