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