我有一个使用Visual Studio 2008编写的VC++应用程序。出于调试目的,根据构建类型(Debug或Release),超时值编译方式不同。下面的代码示例是我如何尝试执行此操作的典型示例。在Visual Studio 2008中使用_DEBUG预处理器定义 - C++
#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
语句上设置断点并尝试运行释放代码时,第一个if
语句上的断点仍然保留,而另一个断点则下移到括号内的第一行。
什么给?我如何使这个编译选项有效?我应该使用别的东西吗?
此代码是否生活在一个DLL或者是直接在主可执行文件的一部分? – Nathanael 2011-03-15 21:54:25
在发布版本中设置断点可能会引起误解。通过优化,调试器可能会被混淆。你确定BAS_THREE_SEC_TIMEOUT是3000而不是更大的? – 2011-03-15 22:29:20