1

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

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

4

2 回答 2

1

不是 100% 确定,但我相当确定它实际上是std::_Debug_message. PlasmaHH 是对的:assert()是正常的解决方案。您可以写信assert(!"message")以获取自定义消息。(注意!)

于 2013-01-15T13:51:21.960 回答
0

您可以使用ASSERTor_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)的断言对话框。根据返回值,您可以调用其他函数。在上面给出的宏中,_CrtDbgBreak当用户点击“重试”按钮时调用函数(这会导致函数返回 1,请参阅 MSDN)。

您可以写入日志文件,显示到调试输出窗口(使用OutputDebugString),或做您可能喜欢的事情。

于 2013-01-26T11:37:33.577 回答