我对这个问题感到有点兴奋 - 在调试模式下,这个问题根本没有出现,但在发布模式下,感觉就像我几乎无法解决它。
这里是VS2013内部发生的截图:
我将nResult
初始化为1L,内部值显示为3422785012.在调试模式下,此值确实为1L。
关于为什么显示的值甚至不接近我为nResult
设置的初始值的任何想法?我尝试过使用编译器设置 - 在调试模式下,这段代码运行正常。
答案 0 :(得分:13)
您的代码很可能optimized
。这意味着编译器已经以源代码与编译器生成的代码不匹配的方式移动和删除了代码。
调试未经优化的代码,或者在完全了解源可能与正在执行的实际指令不匹配的情况下调试优化代码。
如果要调试发布版本但在调试器中查看正确的值,请转到Visual Studio中的项目属性,转到C / C ++部分,然后禁用优化。重建。
答案 1 :(得分:3)
调试版本代码非常困难,因为编译器会重新排序,删除,内联和重新排列内容。
调试“发布”版本的唯一可靠方法是启用所有版本选项,但禁用代码优化。或者您可以在要从中获取完整调试信息的任何模块中禁用优化。我已经看到过去在完全优化的已发布的x64版本中无法跟踪错误时已完成此操作,因为x64比x86更频繁地破坏了参数(当查看崩溃转储时)。