Могу ли я помешать CLR оптимизировать отладочную информацию? - PullRequest
7 голосов
/ 30 июня 2009

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

Это все хорошо, за исключением того, что сотрудник заметил, что он не может просматривать какие-либо свойства класса в отладчике. Оказывается, причина в том, что у него не было полей, определенных в его наследующем классе, и CLR оптимизировал то или иное, так что отладчик не мог отобразить свойства. Можно ли как-то предотвратить это в базовом классе, или мне приходится говорить всем, что им нужно определить хотя бы одно поле, которое используется где-то во время тестов?

Edit:

Похоже, что вероятным виновником должны быть настройки оптимизации / отладки. Тем не менее, я собираю приложение из Visual Studio в режиме отладки, я дважды проверил, что все проекты настроены на отладочную сборку, и ни один из проектов в этом решении не имеет установленного флага Optimize.

Возможно, также было бы уместно отметить, что я использую MSTest и средство запуска тестов Visual Studio.

Редактировать 2:

Под «не удается просмотреть свойства» я имею в виду, когда я оцениваю свойство в Quickwatch и получаю красный восклицательный знак и текст ошибки «Не удалось оценить выражение». И чтобы вы не подумали, что я полностью ошибаюсь с моими подозрениями, добавление поля экземпляра, которое инициализируется в методе инициализации теста, устраняет проблему ...

Редактировать 3:

Проверен результат сборки. Я заметил, что компилятор вызывается с этими параметрами:

/debug+
/debug:full
/optimize-
/define:DEBUG,TRACE

Я должен подумать, что этого будет достаточно, чтобы остановить это, но вот, пожалуйста. :)

Ответы [ 2 ]

7 голосов
/ 30 июня 2009

Я сталкивался с этой же проблемой раньше, и это неизменно связано с тем, что режим отладки каким-то образом отключен. Попробуйте проверить каждое из следующего:

  1. Текущая конфигурация сборки для решения и соответствующих проектов: Отладка .
  2. На вкладке Build страниц свойств установлен флажок Оптимизировать код , снят .

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

2 голосов
/ 17 сентября 2013

Dont Forget the obvious

Убедитесь, что вы не пытаетесь отладить сборку релиза. Все эти параметры компиляции установлены за этими конфигурациями. Отладочная версия предназначена для отладки; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...