2009-04-30 135 views
0

我正在使用Win32/ATL创建的应用程序/ GUI。 因此,在调试版本中设计的UI字段(文本字段)能够正常工作。随着发布版本的变化,它看起来像文本字段的宽度是无限的。 它在调试版本中正常工作,但在发行版本中创建问题。 所以我的问题如何相同的代码可以在调试版本中工作,而不是在发布版本中工作。 有没有可能在发布版本中将其优化为优化设置? 在发布版本中,我们将优化设置设置为Minimum Size,Favor small code。 另外,当我尝试调试版本构建时,它再次正常工作。在发布版本中进行调试会不会优化?VS中的优化设置

我想在发布版本中调试时重现问题,或者如果可能的话,在调试版本中可能会重现该问题。 有什么建议吗?

+0

好吧我在调试版本中启用/ RTC选项。但我的调试版本工作正常。根据我的理解/ RTC选项应该使未初始化的变量为0xCC,以便程序崩溃或显示奇怪的结果。 – anand 2009-05-03 14:31:06

+0

是否有任何其他方式可以使我的调试版本像在发行版本中的行为一样表现?或者有什么办法来调试我的发布版本来解决这个问题。 – anand 2009-05-03 14:32:11

回答

2

VC++以特殊值在调试模式下填充运行时内存。它不能确保任何固定或零初始化。细节请阅读此SO线程。 Uninitialized Memory Blocks。这些值不会每次都使应用程序崩溃。

我已经遇到过类似的情况。一个常见的例子是访问数组边界是一个错误。很多时候,这在调试模式下并不明显,但在发布版本中崩溃。一般来说,运行时在调试模式下是宽松的,并且为程序员错误提供了更多的覆盖。

正如其他人指出的那样,代码确实存在一些问题;很可能是未初始化的变量。

0

关闭我的头顶:确保您使用的ASSERT不包含任何逻辑,因为它们在发布版本中被丢弃。

0

这与优化无关。在调试版本中,编译器通常会将变量初始化为已知值,而在发布版本中则不会。您描述的症状可能是由于您的代码中存在未初始化的变量或指针。

1

尝试启用/RTC (Run-Time Error Checks编译器标志,并使用的s选项。这将局部变量初始化为非零值,这有助于诊断未初始化的变量。