_RPT
, _RPTF
, _RPTW
, _RPTFW
宏
通过生成调试报告跟踪应用程序的进程(仅限调试版本)。 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
文章中的示例。