Подтвердить что ты не робот

Невозможно получить значение, потому что оно было оптимизировано

У меня проблема с отладкой... Внезапно я не вижу значений большинства переменных во время отладки. Мне удалось получить два разных сообщения в окне 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);
        }
    }
4b9b3361

Ответ 1

Лучший способ, которым я нашел убедить компилятор JIT не оптимизировать код, - это использовать INI файл с именем сборки в том же папка, в которой находится сборка с содержимым:

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0

Обратите внимание, что это должно быть имя сборки, а не имя процесса EXE (если это не сборка EXE, которую вы хотите отлаживать). Например. если у вас есть сборка MyCode.dll, имя файла INI будет MyCode.ini.

Ниже приведены некоторые слайды из презентации на .Net-отладке, которые показывают разницу:

Оптимизация:

Отладка с оптимизацией

Без оптимизации:

Отладка без оптимизации

Ответ 2

Перейдите в → Свойства проекта → в разделе Сборка → установите флажок "Оптимизировать код". Не отмечен.

Кроме того, В разделе "Свойства проекта" → "Сборка" → "Дополнительно" → установите раскрывающееся меню "Отладка информации" до "Полный" в "Параметры"

Ответ 3

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

Ответ 4

Для любого другого, кто был озадачен этим, вы можете сделать ту же самую простую ошибку, с которой я столкнулся: мой режим сборки был установлен на Release из другого проекта, который я должен был собрать для релиза ранее в тот же день. Переверните его обратно в Debug; задача решена.