_CrtSetReportFile

使用 _CrtSetReportMode 指定 _CRTDBG_MODE_FILE 后,可以指定接收消息文本的文件句柄。 _CrtSetReportFile 也可由 _CrtDbgReport 使用,_CrtDbgReportW 指定文本的目标(仅限调试版本)。

语法

_HFILE _CrtSetReportFile(
   int reportType,
   _HFILE reportFile
);

参数

reportType
报告类型:_CRT_WARN_CRT_ERROR_CRT_ASSERT

reportFile
reportType 的新报告文件。

返回值

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

备注

_CrtSetReportFile_CrtSetReportMode 函数一起使用,以定义 _CrtDbgReport 生成的特定报表类型的目标。 调用 _CrtSetReportMode 为特定报表类型分配 _CRTDBG_MODE_FILE 报表模式时,还会调用 _CrtSetReportFile 来指定目标文件或流。 未定义 _DEBUG 时,会在预处理过程中删除对 _CrtSetReportFile 的调用。

下表列出了 reportFile 的可用选项和 _CrtDbgReport 的结果行为。 在 Crtdbg.h 中将这些选项定义为位标志。

  • 文件句柄

    将作为消息目标的文件的句柄。 不会尝试验证该句柄的有效性。 必须打开并关闭该文件的句柄。 例如:

    HANDLE hLogFile;
    hLogFile = CreateFile("c:\\log.txt", GENERIC_WRITE,
        FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL, NULL);
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_WARN, hLogFile);
    
    _RPT0(_CRT_WARN,"file message\n");
    CloseHandle(hLogFile);
    
  • _CRTDBG_FILE_STDERR

    将消息写入可进行如下重定向的 stderr

    freopen( "c:\\log2.txt", "w", stderr);
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
    
    _RPT0(_CRT_ERROR,"1st message\n");
    
  • _CRTDBG_FILE_STDOUT

    将消息写入可进行重定向的 stdout

  • _CRTDBG_REPORT_FILE

    返回当前报告模式。

可以单独控制每种报表类型所使用的报表文件。 例如,可以指定 _CRT_ERRORreportType 通过 stderr 进行报告,而 _CRT_ASSERTreportType 通过用户定义的文件句柄或流进行报告。

要求

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

通用 Windows 平台 (UWP) 应用中不支持控制台。 与控制台、stdinstdoutstderr 关联的标准流句柄必须重定向,然后 C 运行时函数才能在 UWP 应用中使用它们。 有关兼容性的详细信息,请参阅 兼容性

库:仅限 CRT 库功能的调试版本。

另请参阅

调试例程