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

StackOverflow https://stackoverflow.com/questions/1330452

Вопрос

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

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

if debugger.IsRunning then
Application.exit
end if

Редактировать: Первоначальное название было «Обнаружение отладчика в памяти».

Это было полезно?

Решение

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

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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top