簡體   English   中英

如何在自己的代碼中使用_DEBUG_ERROR?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM