我有一個使用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