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

Это не в настоящее время доступно через nHibernate (или Hibnernate, AFAIK) API. Вы могли записать что-то вроде этого сами путем хранения состояния объектов, когда они загружаются в сессию, затем сравнивают их.

ПРИМЕЧАНИЕ: Я не видел это для меня, но, если Вы не заблокировали в выбор ORM, необходимо посмотреть на Дозвуковой. Большое грязное состояние прослежено в самих объектах, и Вы смогли бы определить, грязно ли особое свойство.

16
задан OrElse 25 August 2009 в 20:30
поделиться

2 ответа

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

if ( System.Diagnostics.Debugger.IsAttached ) {
  ...
}
33
ответ дан 30 November 2019 в 16:36
поделиться

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

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

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

Я также иногда использовал этот вариант, чтобы гарантировать, что мой шаг отладчика - through не пропускает оценку:

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;
    }
}
5
ответ дан 30 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: