_CrtDbgReport, _CrtDbgReportW
生成与调试消息的报告和发送报表到三个可能的目标 (请只调试版本)。
int _CrtDbgReport(
int reportType,
const char *filename,
int linenumber,
const char *moduleName,
const char *format [,
argument] ...
);
int _CrtDbgReportW(
int reportType,
const wchar_t *filename,
int linenumber,
const wchar_t *moduleName,
const wchar_t *format [,
argument] ...
);
参数
reportType
报告类型: _CRT_WARN、 _CRT_ERROR和_CRT_ASSERT。filename
对的源文件的名称的指针断言/报告发生或 NULL。linenumber
在断言/报告的源文件中的行号发生或 NULL。moduleName
对于模块名称的指针 (.exe 或 .dll) 断言/报告的位置发生。format
为用来窗体控件字符串的指针创建用户消息。argument
format使用的选项替换参数。
返回值
对于所有报表目标, _CrtDbgReport 和 _CrtDbgReportW 返回 – 1,如果错误和 0,则不会遇到错误。 但是,那么,当报表目标是调试消息窗口时,用户单击 Retry 按钮,这些函数返回 1。 如果用户单击调试消息窗口中 Abort 按钮,这些功能中止和不返回值。
_RPT, _RPTF 调试宏调用 _CrtDbgReport 生成它们调试报告。 这些宏以及 _ASSERT [] E、 _RPTWn 和 _RPTFWn,使用 _CrtDbgReportW 的宽字符版本生成它们调试报告。 当 _CrtDbgReport 或 _CrtDbgReportW 返回 1 时,这些宏,启动调试器,在启用实时 (JIT)调试时条件下。
备注
_CrtDbgReport 和 _CrtDbgReportW 可以发送调试报告分成三个不同目标:调试报告文件、调试监视器 ( Visual Studio 调试器复制),或调试消息窗口。 两个配置功能, _CrtSetReportMode 和 _CrtSetReportFile,用于指定为目标或每个报表的目标类型。 这些功能允许报告目标或目标的单独进行控制的每个报表类型。 例如,指定是可能的仅 _CRT_WARNreportType 发送到调试监视器,,而 _CRT_ASSERTreportType 发送到调试消息窗口和用户定义的报告文件。
_CrtDbgReportW 是 _CrtDbgReport的宽字符版本。 所有其输出和字符串参数在宽字符字符串;否则它与单字节字符版本相同。
_CrtDbgReport 和 _CrtDbgReportW 通过替换 argumentn[] 参数创建调试报告的用户邮件。 format 字符串,则使用 printf 或 wprintf 函数定义的规则相同。 这些函数然后生成调试报表并根据为 reportType和文件确定目标或目标,定义的当前报告模式。 当该报告发送到调试消息窗口时, filename、 lineNumber和 moduleName 在窗口中显示的信息包括。
下表列出了报表模式可用的选项或模式和文件和 _CrtDbgReport 和 _CrtDbgReportW发生的行为。 这些选项定义为 Crtdbg.h 的位标志。
报告模式 |
报告文件 |
_CrtDbgReport, _CrtDbgReportW 行为 |
---|---|---|
_CRTDBG_MODE_DEBUG |
不适用 |
对于 windows OutputDebugString API 编写消息。 |
_CRTDBG_MODE_WNDW |
不适用 |
调用 windows API MessageBox 创建消息框与 Abort、 Retry和 Ignore 按钮时显示消息。 如果用户单击 Abort, _CrtDbgReport 或 _CrtDbgReport 中止。 如果用户单击 Retry,则返回 1。 如果用户单击 Ignore,则继续执行,并 _CrtDbgReport 和 _CrtDbgReportW 返回 0。 请注意,单击 " Ignore ,当错误条件存在结果在 “通常未定义的行为时”。 |
_CRTDBG_MODE_FILE |
__HFILE |
为用户提供的 HANDLE编写消息,使用窗口 WriteFile API,并且不验证文件句柄有效性;应用程序以打开报告文件并将有效的文件句柄负责。 |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDERR |
为 stderr的写入消息。 |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDOUT |
为 stdout的写入消息。 |
该报表可以发送到一个,两个或三个目标或到没有目标。 有关指定报表模式或模式和报告文件的更多信息,请参见 _CrtSetReportMode 和 _CrtSetReportFile 功能。 有关使用调试宏和报告功能的更多信息,请参见 使用验证或报告的宏。
如果应用程序的 _CrtDbgReport 和 _CrtDbgReportW所提供的) 需要更大的灵活性,使用 _CrtSetReportHook 功能,可以编写拥有报告功能和挂钩到 C 运行库报告机制。
要求
实例 |
必需的头 |
---|---|
_CrtDbgReport |
crtdbg.h |
_CrtDbgReportW |
crtdbg.h |
有关更多兼容性信息,请参见中介绍的 兼容性 。
库
只调试 C 运行库 的版本。
示例
// crt_crtdbgreport.c
#include <crtdbg.h>
int main() {
#ifdef _DEBUG
CrtDbgReport(_CRT_ASSERT, NULL, NULL, "some module", NULL);
#endif
}
为的示例演示如何参见 crt_dbg2 更改报表功能。