将DWORD显式初始化为1,但调试器显示超出范围值

我对这个问题有点松懈 – 在调试模式下这个问题根本没有出现,但在发布模式下,感觉就像我几乎无法解决它。

这是VS2013内部发生的屏幕截图:

在此处输入图像描述

我将nResult初始化为1L,内部值显示为3422785012.在调试模式下,该值确实为1L。

关于为什么显示的值甚至不接近我为nResult设置的初始值的任何想法? 我尝试过使用编译器设置 – 在调试模式下,这段代码运行正常。

您的代码很可能已经过optimized 。 这意味着编译器已经以源代码与编译器生成的代码不匹配的方式移动和删除了代码。

调试未经优化的代码,或者在完全了解源可能与正在执行的实际指令不匹配的情况下调试优化的代码。

如果要调试发布版本但在调试器中查看正确的值,请转到Visual Studio中项目的“属性”,转到“C / C ++”部分,然后禁用优化。 重建。

调试发布代码非常困难,因为编译器将重新排序,删除,内联和重新排列。

调试“发布”版本的唯一可靠方法是启用所有发布选项,但禁用代码优化。 或者,您可以在要从中获取完整调试信息的任何模块中禁用优化。 我已经看到过去在完全优化的已发布的x64版本中无法跟踪错误时已经完成了这一点,因为x64比x86(当查看崩溃转储时)更频繁地破坏参数。