我们最近遇到了 VS2010 Express C++ 的一个非常奇怪的行为。
我们运行完美的应用程序在调试模式下突然出现了意外行为,例如以某种方式呈现到全屏,尽管它是一个很小的编辑器窗口。
我们发现可以通过将调试模式中的代码优化从“停用”(/Od)切换到“项目默认”来禁用新行为,然后意外使用“最大化速度”选项(/O2)。
如果不是因为代码重组正在进行中,现在几乎不可能进行调试,那么这不会是坏事,所以断点、单步执行、查看值都是没有意义的。调试器甚至无法找出变量的正确值(这只是合乎逻辑的)。
所以我很困惑如何处理它。为什么它首先会失败,为什么它需要调试模式下的优化程序?
另外,不好笑的是,我们遇到了一个 c++ 编译器错误,编译器没有注意到没有传递模板参数,因此使一些代码静默失败。