Я немного ошеломлен этой проблемой — в режиме отладки эта проблема вообще не возникает, но в режиме выпуска кажется, что я почти ничего не могу сделать, чтобы это исправить.
Вот скриншот того, что происходит внутри VS2013:
Я инициализирую nResult
до 1L, а внутреннее значение отображается как 3422785012. В режиме отладки это значение действительно равно 1L.
Любые идеи относительно того, почему отображаемое значение даже не близко к начальному значению, которое я установил для nResult
? Я пытался играть с настройками компилятора — в режиме отладки этот код работает нормально.
Ваш код более чем вероятно optimized
, Это означает, что компилятор переместил и удалил код так, что ваш исходный код не соответствует тому, что создал компилятор.
Либо отлаживайте неоптимизированный код, либо отлаживайте оптимизированный код с полным пониманием того, что источник может не соответствовать фактическим выполняемым инструкциям.
Если вы хотите отладить сборку релиза, но видите правильные значения в отладчике, перейдите в Свойства вашего проекта в Visual Studio, перейдите в раздел C / C ++ и отключите оптимизацию. Перестроить.
Отладка кода релиза довольно сложна, так как компилятор переупорядочивает, удаляет, вставляет и переставляет вещи.
Единственный надежный способ отладки сборки «релиза» — оставить все опции релиза включенными, но отключить оптимизацию кода. Или вы можете просто отключить оптимизацию в любых модулях, от которых вы хотите получить полную информацию об отладке. Я видел это в прошлом, когда невозможно было отследить ошибку в полностью оптимизированной выпущенной сборке x64, так как x64 забивает параметры гораздо чаще, чем x86 (при просмотре аварийных дампов).