0

我们最近遇到了 VS2010 Express C++ 的一个非常奇怪的行为。

我们运行完美的应用程序在调试模式下突然出现了意外行为,例如以某种方式呈现到全屏,尽管它是一个很小的编辑器窗口。

我们发现可以通过将调试模式中的代码优化从“停用”(/Od)切换到“项目默认”来禁用新行为,然后意外使用“最大化速度”选项(/O2)。

如果不是因为代码重组正在进行中,现在几乎不可能进行调试,那么这不会是坏事,所以断点、单步执行、查看值都是没有意义的。调试器甚至无法找出变量的正确值(这只是合乎逻辑的)。

所以我很困惑如何处理它。为什么它首先会失败,为什么它需要调试模式下的优化程序?

另外,不好笑的是,我们遇到了一个 c++ 编译器错误,编译器没有注意到没有传递模板参数,因此使一些代码静默失败。

4

2 回答 2

0

项目默认值不是调试模式默认值,但实际上是发布模式的默认值。项目默认值不知道调试/发布配置。覆盖 /Od 是调试配置的默认设置。如果您已将调试配置中的所有项目属性重置为默认值,那么您已将调试配置设置为与发布模式几乎相同。

调试/发布配置没有什么特别之处——它们只是名称,所以项目属性不包括每个特殊的默认值。

于 2012-11-19T11:21:06.210 回答
0

想想像返回值优化这样的东西。还要查找打开代码优化时编译器避免创建的临时对象。也许您可以使用一些C++ lint应用程序来找出您的代码在调试模式下行为不端的一些原因。

于 2012-11-19T11:23:53.707 回答