Существует ли атрибут .NET для предотвращения оценки свойства в отладчике?

Поставьте минус после последней скобки.

production = { nonterminal }-;

ИСО / МЭК 14977: 1996 (E) 5.8 Синтаксический термин

ПРИМЕЧАНИЕ. - {"A"} - представляет собой последовательность из одного или нескольких символов A, поскольку это синтаксический термин с пустым синтаксическим исключением.

5
задан Nescio 21 February 2009 в 20:10
поделиться

3 ответа

Этим не управляют атрибуты. Это - свойственная функция отладчика.

Базовая причина этой функции состоит в том, чтобы предотвратить нежелательные функциональные оценки пользователем. Func Evals являются опасной операцией в отладчике и могут вызвать значительные медленные холмы или повредить состояние программы. Отладчик проявляет большую заботу, чтобы удостовериться, что это непреднамеренно не делает дополнительного func evals, который может ухудшить Вашу отладку опыта.

В случае, где существует объект в окне часов/местных жителей/автоматических, которое может вызвать func оценку и отладчик, не полагает, что func оценка должна произойти, значение отобразится серым, и кнопка Обновить появится в столбце значений. Нажатие на ту кнопку говорит отладчик, "не действительно я хочу оценить то выражение".

Существует много причин, почему это произойдет в отладчике. Следующие 2, хотя наиболее вероятны.

Неявная оценка свойства отключена

Инструменты-> Отладчик-> Опции-> Включают Неявную Оценку Свойства

Если это значение неконтролируемо, Вы говорите отладчик, не автооценивайте свойства. Свойства под капотом являются просто вызовами функции. Они обычно более безопасны, чем нормальные вызовы функции, но не всегда.

Но можно все еще вынудить свойства оценить путем ввода их непосредственно в окно часов. Если Вы тип 2 подряд, первое значение станет "устаревшим". Это вызвано тем, что ввод второго выражения в окне часов заставит все другие выражения быть переоцененными. Почему? Поскольку действие оценки любого выражения, возможно, изменило результаты других.

Поскольку неявная func оценка выключена, первое свойство не автооценит, и необходимо вызвать его.

Оценка Func и шаг

Если Вы добавите выражение к окну часов, которое делает функциональную оценку и затем делает операцию шага, то значение будет "лишено новизны" в окне часов.

Это сделано по многим причинам, одной из большинства эффективных причин, хотя ступает производительность. Пользователю очень свойственно ввести много выражений в окне часов, и определенно не редко иметь функциональную оценку. По одному они не являются очень медленными. Но предположите, что Вы пытаетесь ступить быстро через некоторый код, и у Вас было 10 func evals в окне часов. Это может быстро сложить и значительно ухудшить Ваш ступающий опыт. Так func evals автоматически не переоценены.

6
ответ дан 13 December 2019 в 19:36
поделиться

В то время как это не генерирует значок обновления, Вы обращаетесь к, очень полезным атрибутом является Система. Диагностика. DebuggerBrowsableAttribute, который позволяет Вам скрывать поля от когда-либо разоблачения в окнах Watch. Это полезно, когда поля и дублированный средствами доступа свойства и они не должны обнаруживаться дважды, или если свойство выполняет некоторую существенную операцию (как то, что Вы предлагаете), и необходимо всегда подавлять его так, чтобы отладчик не оценивал его.

4
ответ дан 13 December 2019 в 19:36
поделиться

Это не точно, что Вы ищете, но если Вы подаете заявку [DebuggerStepThrough] припишите методу считывания/методу set свойства, которое он будет препятствовать тому, чтобы отладчик повредил на свойстве, явно установив точку останова на строке. Это могло быть полезно, если Вы хотите ожидать и установить точку останова после того, как Вы знаете, что безопасно оценить. Вы могли также использовать [DebuggerHidden] если Вы хотите скрыть его от отладки всех вместе.

1
ответ дан 13 December 2019 в 19:36
поделиться