Изменение потока программы при запуске под отладчиком
Есть ли способ обнаружить, что отладчик работает в памяти?
и здесь появляется псевдокод формы загрузки.
if debugger.IsRunning then
Application.exit
end if
Изменить: оригинальное название было "Обнаружение в памяти отладчика"
2 ответа
Решение
Попробуйте следующее
if ( System.Diagnostics.Debugger.IsAttached ) {
...
}
Прежде чем использовать это для закрытия приложения, работающего в отладчике, необходимо помнить две вещи:
- Я использовал отладчик для извлечения трассы сбоя из коммерческого приложения.NET и отправки ее в компанию, где она впоследствии была исправлена, с благодарностью за простоту и
- Эта проверка может быть тривиально побеждена.
Теперь, для большей пользы, вот как использовать это обнаружение, чтобы сохранить функциональность в отладчике от изменения состояния вашей программы, если у вас есть кэш с лениво оцененным свойством по соображениям производительности.
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;
}
}