2013-01-15 50 views
1

<vector>頭裏面,有這樣的代碼:如何在我自己的代碼中使用_DEBUG_ERROR?

_DEBUG_ERROR("vector iterator not dereferencable"); 
_SCL_SECURE_OUT_OF_RANGE; 

與消息將暫停程序,併爲程序員提供了一個機會來調試代碼。我想使用_DEBUG_ERROR。它在<xutility>中定義。

然而,當我包括<xutility>,並嘗試使用_DEBUG_ERROR,我得到以下錯誤:

error C3861: "_Debug_message": identifier not found. 

_Debug_message在裏面<xutility>定義,在第28行!爲什麼編譯器會抱怨?

另外,是否有另一個(也許甚至有點可移植?)方式來停止調試程序?

+0

什麼是錯誤的斷言/中止? – PlasmaHH

+1

@PlasmaHH那些不給這樣一個漂亮的錯誤消息窗口,但我想我可以忍受那個... – fredoverflow

回答

1

不是100%確定,但我相當肯定它實際上是std::_Debug_message。 PlasmaHH是正確的:assert()是正常的解決方案。您可以編寫assert(!"message")以獲取自定義消息。 (注意!)

+0

謝謝,一個簡單的'使用std :: _ Debug_message;'修復它:) – fredoverflow

0

您可以使用ASSERT_ASSERT宏來進行斷言和調試。或者,你可以制定你自己的assert-macro。使用的_ASSERT定義(自crtdbg.h拍攝):

#define _ASSERT_EXPR(expr, msg) \ 
     (void) ((!!(expr)) || \ 
       (1 != _CrtDbgReportW(_CRT_ASSERT, _CRT_WIDE(__FILE__), __LINE__, NULL, L"%s", msg)) || \ 
       (_CrtDbgBreak(), 0)) 

這裏最重要的功能是_CrtDbgReportW,這將顯示具有三個標準按鍵斷言對話盒(中止,重試和忽略)。根據返回值,您可以調用其他函數。在上面給出的宏中,當用戶點擊'重試'按鈕(這會導致函數返回1,請參閱MSDN)時調用函數_CrtDbgBreak

您可以寫入日誌文件,顯示調試輸出窗口(使用OutputDebugString),或者執行您可能喜歡的操作。

相關問題