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

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

и здесь появляется псевдокод формы загрузки.

if debugger.IsRunning then
Application.exit
end if

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

2 ответа

Решение

Попробуйте следующее

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

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

  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;
    }
}
Другие вопросы по тегам