VS2010 Express建议在调试模式下进行优化,如果没有它们,则无法运行应用程序

时间:2012-11-19 10:43:43

标签: c++ visual-studio-2010 compiler-optimization

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

我们的应用程序运行完美,突然在调试模式中显示出意外行为,就像以某种方式渲染到全屏,尽管它是一个小的编辑窗口。

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

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

所以我很困惑该怎么做。为什么它首先失败,为什么它需要在debugmode中优化程序?

另外,不好笑,我们遇到了一个c ++编译器错误,编译器没有注意到没有移交模板参数,因此一些代码无声地失败。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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