繁体   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