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

时间:2013-01-15 13:40:34

标签: c++ debugging visual-c++ visual-studio-2012

<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>内定义了!为什么编译器会抱怨?

另外,是否还有另一种(甚至可能是可移植的?)方法来停止调试程序?

2 个答案:

答案 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),或执行您喜欢的操作。