我正在使用Win32 / ATL创建的应用程序/ GUI。 所以有UI字段(文本字段),它在调试版本中设计得很好。使用发布版本时,它会出现格式错误,看起来文本字段的宽度是无限的。 它在调试版本中工作正常但在发布版本中创建问题。 所以我的问题是,相同的代码如何在调试版本中工作,而不是在发布版本中工作。 是否有可能将其与发布版本中的优化设置相关联? 在发布版本中,我们将优化设置设置为Minimum Size,Favor small code。 此外,当我尝试调试发布版本时,它再次正常工作。发布版本中的调试是否会删除优化?
我希望在发布版本中进行调试时重现此问题,或者如果可能,可以在调试版本中重现该问题。 有什么建议吗?
答案 0 :(得分:2)
VC ++使用特殊值在调试模式下填充其运行时内存。但它不能确保任何固定或零初始化。阅读此SO线程了解详细信息。 Uninitialized Memory Blocks。这些值可能不会每次都使应用程序崩溃。
有些时候我遇到过类似的情况。一个常见的例子是访问数组边界是一个错误。很多时候,这在调试模式下并不明显,但在发布版本中崩溃了。通常,运行时在调试模式下是透明的,并且为程序员错误提供了更多的掩护。
正如其他人所指出的那样,代码肯定存在一些问题;很可能是未初始化的变量。
答案 1 :(得分:1)
尝试使用 s 选项启用/RTC (Run-Time Error Checks编译器标志。这会将局部变量初始化为非零值,这有助于诊断未初始化的变量。
答案 2 :(得分:0)
脱离我的头脑:确保您使用的ASSERT
不包含任何逻辑,因为这些在发布版本中被丢弃。
答案 3 :(得分:0)
这与优化无关。在调试版本中,编译器通常会将变量初始化为已知值,而在发布版本中则不会。您描述的症状可能是由于代码中未初始化的变量或指针引起的。