Изменение хода программы при работе под отладчиком
Вопрос
Есть ли способ обнаружить, что отладчик работает в памяти?
и вот псевдокод при загрузке формы.
if debugger.IsRunning then
Application.exit
end if
Редактировать: Первоначальное название было «Обнаружение отладчика в памяти».
Решение
Попробуйте следующее
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;
}
}
Не связан с StackOverflow