通过生成调试报告跟踪应用程序的进程(仅限调试版本)。 n后缀指定args中的参数个数,它可以是 0、1、2、3、4 或 5。
语法
_RPTn(
reportType,
format,
...[args]
);
_RPTFn(
reportType,
format,
[args]
);
_RPTWn(
reportType,
format
[args]
);
_RPTFWn(
reportType,
format
[args]
);
参数
reportType
报告类型:_CRT_WARN、_CRT_ERROR 或 _CRT_ASSERT。
format
用于创建用户消息的格式控件字符串。
args
由 format 使用的替换参数。
注解
所有这些宏都采用reportType和format参数。 此外,它们还可能需最多四个附加参数,由追加到宏名称的数字表示。 例如,_RPT0和_RPTF0不采用更多参数,_RPT1和_RPTF1采用arg1,_RPT2和_RPTF2采用arg1和arg2等。
_RPT和_RPTF宏类似于printf函数,因为它们可用于跟踪调试过程中的应用程序的进度。 不过,这些宏比printf更灵活,因为它们无需包含在#ifdef语句中,以防止在零售版本的应用程序中调用它们。 这种灵活性是通过使用_DEBUG宏实现的;_RPT和_RPTF宏仅在定义了_DEBUG标志时可用。 未定义 _DEBUG 时,会在预处理过程中删除对这些宏的调用。
_RPTW 和 _RPTFW 宏是这些宏的宽字符版本。 它们类似于 wprintf 并将宽字符字符串用作参数。
_RPT宏调用_CrtDbgReport函数,生成包含用户消息的调试报告。 _RPTW 宏调用 _CrtDbgReportW 函数,生成具有宽字符的同一个报告。 除了用户消息以外,_RPTF 和 _RPTFW 宏还将创建包含调用报告宏所在的源文件和行号的调试报告。 通过使用由printf函数定义的相同规则将arg[n]参数替换为format字符串,以创建用户消息。
_CrtDbgReport 或 _CrtDbgReportW 会基于当前报告模式以及为 reportType 定义的文件,生成调试报告并确定其目标。 _CrtSetReportMode 和 _CrtSetReportFile 函数用于为每种报告类型定义目标。
如果调用_RPT宏,但不调用_CrtSetReportMode或_CrtSetReportFile,则显示以下消息:
| 报告类型 | 输出目标 |
|---|---|
_CRT_WARN |
不显示警告文本。 |
_CRT_ERROR |
弹出窗口。 如果指定了 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);,则相同。 |
_CRT_ASSERT |
与 _CRT_ERROR 相同。 |
当目标为调试消息窗口且用户选择“重试”按钮时,_CrtDbgReport或_CrtDbgReportW返回 1。 如果启用了实时 (JIT) 调试,此返回值会导致这些宏启动调试器。 有关将这些宏用作调试错误处理机制的详细信息,请参阅用于报告的宏。
另外还有其他两个生成调试报告的宏: _ASSERT宏,但仅在其表达式参数计算结果为FALSE时生成报告。 _ASSERTE宏与_ASSERT非常类似,但会在生成的报告中包含失败的表达式。
要求
| 宏 | 必需的标头 |
|---|---|
_RPT 宏 |
<crtdbg.h> |
_RPTF 宏 |
<crtdbg.h> |
_RPTW 宏 |
<crtdbg.h> |
_RPTFW 宏 |
<crtdbg.h> |
有关兼容性的详细信息,请参阅 兼容性。
库
仅限 C 运行时库的调试版本。
虽然这些宏在包含crtdbg.h时可用,但要运行,应用程序必须链接其中一个调试库,因为这些宏会调用其他运行时函数。
示例
请参阅 _ASSERT 文章中的示例。