1

Я разрабатываю плагин для большего приложения, и я столкнулся с странной проблемой со следующим кодом. При запуске в режиме Release или Debug без контрольных точек все в порядке. Но когда я поставил точку останова где-то рядом с фрагментом ниже, я получаю сообщение об ошибке. Похоже, что отладчик предварительно оценивает код внутри блоков if, вызывая ошибку, несмотря на то, что этот код никогда не был достигнут.Visual Studio 2008 отладчик - функция оценки weirdness

Обратите внимание, что индексатор внутренне проверяет неправильные индексы и запускает путь к основному приложению. Основное приложение обрабатывает это событие ошибки, показывая диалоговое окно и закрывая себя. Я не могу изменить основное приложение, и я не могу изменить индексатор (хотя я думаю, что для исключения может возникнуть исключение, а не для запуска события).

int a = GetA(); // returns 0 
if (a == 1) 
{ 
    _manager[a - 1][ColumnName.Name] = "X"; //Manager has an indexer returning a DataRow. 
} 

if (a == 2) 
{ 
    _manager[a - 1][ColumnName.Name] = "Y"; 
} 

Когда я отключил «Включить оценку имущества и другие вызовы неявной функции» в Tools-> Options-> Отладка это работало отлично. Есть ли у вас идеи, как обходиться? Мне не нужны эти сообщения об ошибках, но я также не хочу потерять удобство оценки отладчика.

[EDIT] Я переписал описание.

[UPDATE] Я временно изменил код внутри индексатора, чтобы выбросить исключение, связанное с делегированием события на верхний уровень обработки ошибок, и это помогло. VS отладчик поглотили исключение, так что все побочные эффекты остановки (не окно сообщений не отображалось слой обработки ошибок)

Так что вопрос:

Есть третий вариант рядом:

1) Постоянно меняется от случая будучи выскочил вверх к верхнему слою, чтобы исключение

2) Снимите флажок «Включить оценку свойств и другие неявные вызовы функции»

+1

Можете ли вы объяснить, что вы подразумеваете под «ошибкой»? Появляется ли диалоговое окно, выходят из отладчика и т. Д. – JaredPar

+0

«ошибка - это диалоговое окно» - это не сообщение об ошибке, которое я когда-либо видел. Документируйте свой вопрос лучше. –

ответ

1

Контролируете вы реализацию класса, _manager - это пример? HВы пытались поместить в него атрибут [DebuggerBrowsable (Never)]? Он должен скрыть это свойство от отладчика.

+0

Нехорошо. Я также пробовал DebuggerStepThrough, но он тоже не работает. В любом случае спасибо за предложения. – grysik44