4

我对这个问题有点吃惊——在调试模式下,这个问题根本不会出现,但在发布模式下,感觉我几乎无能为力。

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

在此处输入图像描述

我初始化nResult为1L,内部值显示为3422785012。在Debug模式下,这个值确实是1L。

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

4

2 回答 2

14

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

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

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

于 2014-04-28T18:54:36.550 回答
3

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

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

于 2014-04-28T18:57:40.730 回答