Невозможно получить значение, потому что оно было оптимизировано
У меня проблема с отладкой...
Внезапно я не вижу значений большинства переменных во время отладки.
Мне удалось получить два разных сообщения в окне Immediate:
Невозможно получить значение локального или аргумента "параметр", поскольку он недоступен при указании этой инструкции, возможно, потому, что он был оптимизирован.
и
Внутренняя ошибка в оценке выражения.
Я пробовал и проверял следующие вещи:
- Конфигурация решения настроена на отладку (не)
- Проект → Настройки → Сборка → Оптимизированный код не установлен
- Инструменты → Параметры → Отладка → Использовать режим совместимости с Managaed (не работает)
Есть ли у вас какие-либо дальнейшие идеи, как я могу правильно отлаживать снова?: (
Заранее спасибо
Edit
Код ничего особенного. Это происходит, когда я пытаюсь посмотреть, что внутри параметра [Key]
public void AddOrUpdateQuartzJob(string jobName, IList<KeyValuePair<string, string>> parameters)
{
var jobDetail = this.GetJobDetail(jobName);
if (jobDetail != null)
{
foreach (var parameter in parameters)
{
jobDetail.JobDataMap[parameter.Key] = parameter.Value;
}
}
else
{
this.ScheduleNewJob(jobName, parameters);
}
}
Ответы
Ответ 1
Лучший способ, которым я нашел убедить компилятор JIT не оптимизировать код, - это использовать INI файл с именем сборки в том же папка, в которой находится сборка с содержимым:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
Обратите внимание, что это должно быть имя сборки, а не имя процесса EXE (если это не сборка EXE, которую вы хотите отлаживать). Например. если у вас есть сборка MyCode.dll
, имя файла INI будет MyCode.ini
.
Ниже приведены некоторые слайды из презентации на .Net-отладке, которые показывают разницу:
Оптимизация:
![Отладка с оптимизацией]()
Без оптимизации:
![Отладка без оптимизации]()
Ответ 2
Перейдите в → Свойства проекта → в разделе Сборка → установите флажок "Оптимизировать код". Не отмечен.
Кроме того,
В разделе "Свойства проекта" → "Сборка" → "Дополнительно" → установите раскрывающееся меню "Отладка информации" до "Полный" в "Параметры"
Ответ 3
После внесения изменений, перечисленных в кодекайзен и инанка талагала, не забудьте очистить, перестроить и опубликовать, чтобы сделать изменения эффективными.
Ответ 4
Для любого другого, кто был озадачен этим, вы можете сделать ту же самую простую ошибку, с которой я столкнулся: мой режим сборки был установлен на Release из другого проекта, который я должен был собрать для релиза ранее в тот же день. Переверните его обратно в Debug; задача решена.