在<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.
但{28}中_Debug_message
在<xutility>
内定义了!为什么编译器会抱怨?
另外,是否还有另一种(甚至可能是可移植的?)方法来停止调试程序?
答案 0 :(得分:1)
不是100%肯定,但我很确定它实际上是std::_Debug_message
。 PlasmaHH是对的:assert()
是正常的解决方案。您可以编写assert(!"message")
来获取自定义消息。 (注意!)
答案 1 :(得分:0)
您可以使用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,它将显示断言对话框,其中有三个标准按钮(Abort,Retry和Ignore)。根据返回值,您可以调用其他函数。在上面给出的宏中,当用户点击“重试”按钮(导致函数返回1,参见MSDN)时,将调用函数_CrtDbgBreak
。
您可以写入日志文件,显示到调试输出窗口(使用OutputDebugString
),或执行您喜欢的操作。