【发布时间】:2011-03-15 21:47:49
【问题描述】:
我有一个使用 Visual Studio 2008 编写的 VC++ 应用程序。出于调试目的,超时值的编译方式因构建类型(调试或发布)而异。下面的代码示例是我尝试执行此操作的典型示例。
#ifdef _DEBUG
if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, INFINITE )) != WAIT_OBJECT_0 )
#else
if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, BAS_THREE_SEC_TIMEOUT )) != WAIT_OBJECT_0 )
#endif
{
/* ... */
}
调试配置在预处理器定义中定义了_DEBUG。发布配置没有它。对于每个相应的配置,预期的行显示为灰色(可能表示将编译另一行)。
但是,在运行时,发布构建超时仍然是 INFINITE。当我尝试在两个 if 语句上设置断点并尝试运行 Release 代码时,第一个 if 语句上的断点仍然存在,而另一个断点被移到括号内的第一行。
什么给了?如何使此编译选项起作用?我应该使用别的东西吗?
【问题讨论】:
-
此代码是存在于 DLL 中还是直接包含在您的主要可执行文件中?
-
在发布版本中设置断点可能会产生误导。启用优化后,调试器可能会感到困惑。您确定 BAS_THREE_SEC_TIMEOUT 是 3000 而不是更大的值吗?
标签: c++ debugging visual-studio-2008 c-preprocessor