_CrtSetReportMode

指定由 _CrtDbgReport 生成的特定报表类型和调用 _CrtDbgReport_CrtDbgReportW 的任何宏的一个或多个目标,例如 _ASSERT_ASSERTE_ASSERT_EXPR_RPT_RPTF_RPTW_RPTFW(仅限调试版本)。

语法

int _CrtSetReportMode(
   int reportType,
   int reportMode
);

参数

reportType
报告类型:_CRT_WARN_CRT_ERROR_CRT_ASSERT

reportMode
新报告模式或 reportType 的模式。

返回值

成功完成后,_CrtSetReportMode 会返回上一个报告模式或在 reportType 中指定的报告类型的模式。 如果传入的 reportType 值无效或者为 reportMode 指定的模式无效,_CrtSetReportMode 将调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将 errno 设置为 EINVAL 并返回 -1。 有关详细信息,请参阅errno, _doserrno, _sys_errlist_sys_nerr.

备注

_CrtSetReportMode 指定 _CrtDbgReport 的输出目标。 由于 _ASSERT_ASSERTE_RPT_RPTF 宏调用 _CrtDbgReport,因此,_CrtSetReportMode 指定由这些宏指定的文本的输出目标。

未定义 _DEBUG 时,会在预处理过程中删除对 _CrtSetReportMode 的调用。

如果不调用 _CrtSetReportMode 来定义消息的输出目标,则以下默认值有效:

  • 断言失败和错误会定向到调试消息窗口。

  • 警告从 Windows 应用程序发送到调试器的输出窗口。

  • 不显示控制台应用程序中的警告。

下表列出了在 Crtdbg.h 中定义的报告类型。

报告类型 说明
_CRT_WARN 不需要立即关注的警告、消息和信息。
_CRT_ERROR 错误、不可恢复的问题和需要立即关注的问题。
_CRT_ASSERT 断言失败(求值为 FALSE 的断言表达式)。

_CrtSetReportMode 函数将 reportMode 中指定的新报告模式分配给 reportType 中指定的报告类型,并返回之前为 reportType定义的报告模式。 下表列出了 reportMode 的可用选项和 _CrtDbgReport 的结果行为。 在 Crtdbg.h 中将这些选项定义为位标志。

报告模式 _CrtDbgReport 行为
_CRTDBG_MODE_DEBUG 将消息写入调试器的输出窗口。
_CRTDBG_MODE_FILE 将消息写入用户提供的文件句柄。 应调用 _CrtSetReportFile 来定义要用作目标的特定文件或流。
_CRTDBG_MODE_WNDW 创建消息框以与“中止”、“重试”和“忽略”按钮一起显示消息。
_CRTDBG_REPORT_MODE 为指定的 reportType 返回 reportMode

1 _CRTDBG_MODE_FILE

2 _CRTDBG_MODE_DEBUG

4 _CRTDBG_MODE_WNDW

可以使用一种、两种或三种模式,或不使用任何模式报告每种报告类型。 因此,可以为单个报表类型定义多个目标。 例如,以下代码段导致将断言失败发送到调试消息窗口和 stderr

_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW );
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );

此外,可以分别控制报表模式和每个报表类型的模式。 例如,可以指定将 _CRT_WARNreportType 发送到输出调试字符串,而使用调试消息窗口显示 _CRT_ASSERT,并将其发送到 stderr,如前所述。

要求

例程 必需的标头 可选标头
_CrtSetReportMode <crtdbg.h> <errno.h>

有关兼容性的详细信息,请参阅 兼容性

库:仅限 C 运行时库的调试版本。

另请参阅

调试例程