_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_WARN
的 reportType
发送到输出调试字符串,而使用调试消息窗口显示 _CRT_ASSERT
,并将其发送到 stderr
,如前所述。
要求
例程 | 必需的标头 | 可选标头 |
---|---|---|
_CrtSetReportMode |
<crtdbg.h> |
<errno.h> |
有关兼容性的详细信息,请参阅 兼容性。
库:仅限 C 运行时库的调试版本。