Модуль оптимизирован и труден для отладки даже при сборке отладки, когда опция оптимизации не отмечена - PullRequest
0 голосов
/ 21 июня 2019

У меня есть эта веб-программа, которая ссылается на несколько проектов библиотек классов, которые мы написали в рамках одного решения.Но одно из них особенное: прерывая выполнение во время отладки, я получаю сообщение Cannot evaluate expression because the code of the current method is optimized при попытке просмотра некоторых переменных, а также пропускаются некоторые строки кода при переходе.Все остальные библиотеки хорошо отлаживаются, кроме этой.

Я использовал Debug-> Windows-> Modules и вижу, что для этой проблемной DLL столбец, оптимизированный для модуля, - это «Да».Я проверил свойство решения и подтвердил, что активная конфигурация Debug для уровня решения, а также для каждого проекта под ним.

Также для проблемного проекта я подтвердил на странице Build, что Define DEBUG constant проверенои Optimize Code не проверено.На странице Advanced Debugging information - это Full - все то же самое, что и в других библиотеках.

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

1 Ответ

0 голосов
/ 21 июня 2019

Запустите командную строку разработчика.Запустите ildasm.Откройте проблемную DLL и дважды щелкните по Manifest.Нашел следующий код:

  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) 

Имейте ввиду, что 01 00 02 00 00 00 00 00.Откройте обычную отлаживаемую библиотеку DLL и найдите это значение 01 00 07 01 00 00 00 00.

. Наконец, это указывает на строку в Assembly.cs под этими свойствами проекта.

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

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

Для записи, согласно Дэйву Блэку из другого поста:

Если атрибут DebuggableAttribute отсутствует, это определенно оптимизированная сборка

Вдохновлен https://dave -black.blogspot.com / 2011/12 / как сказать-если-сборка-отладка-или.html

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