在Visual Studio 2008中使用_DEBUG预处理器定义 - C ++

时间:2011-03-15 21:47:50

标签: c++ debugging visual-studio-2008 c-preprocessor

我有一个使用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。 Release配置没有它。对于每个相应的配置,预期的衬里显示为灰色(可能表示将编译另一行)。

但是,在运行时,发布构建超时仍为INFINITE。当我尝试在两个if语句上设置断点并尝试运行Release代码时,第一个if语句上的断点仍然存在,而另一个断点则向下移动到括号内的第一行

是什么给出的?如何使此编译选项有效?我应该使用其他东西吗?

2 个答案:

答案 0 :(得分:3)

或许这样的事情呢?

#ifdef _DEBUG
#define NONMS_WAIT_TIMEOUT INFINITE
#else
#define NONMS_WAIT_TIMEOUT BAS_THREE_SEC_TIMEOUT
#endif

if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, NONMS_WAIT_TIMEOUT)) != WAIT_OBJECT_0 )
{
    /* ... */
}

编辑:VS中的调试版本应该定义_DEBUG,发布版本应该定义NDEBUG。检查您的项目预处理器指令,以确保这是您拥有的。

答案 1 :(得分:3)

像这样编写并构建在Release版本中:

#ifdef _DEBUG
#error Something is really wrong, _DEBUG is still defined
if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, INFINITE )) != WAIT_OBJECT_0 )
#else
if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, BAS_THREE_SEC_TIMEOUT )) != WAIT_OBJECT_0 )
#endif