[英]How do I use _DEBUG_ERROR in my own code?
在<vector>
標頭中,有這樣的代碼:
_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行中! 為什么編譯器會抱怨?
另外,還有另一種(甚至可能是可移植性的)方法來停止程序進行調試嗎?
不確定100%,但我可以肯定它實際上是std::_Debug_message
。 PlasmaHH是正確的: assert()
是正常的解決方案。 您可以編寫assert(!"message")
以獲得自定義消息。 (注意!)
您可以使用ASSERT
或_ASSERT
宏進行斷言和調試。 或者,您可以制作自己的斷言宏。 使用_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 ,它將顯示具有三個標准按鈕(取消,重試和忽略)的斷言對話框。 然后,根據返回值,您可以調用其他函數。 在上面給出的宏中,當用戶單擊“重試”按鈕時,函數_CrtDbgBreak
被調用(這會使函數返回1,請參見MSDN)。
您可以寫入日志文件,顯示到調試輸出窗口(使用OutputDebugString
),或執行您喜歡的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.