Поделиться через


_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, если ошибки отсутствуют. Однако, если назначение отчета — окно с сообщением об отладке, а пользователь нажимает кнопку Повторить, эти функции возвращают значение 1. Если пользователь нажимает кнопку Прервать в окне с сообщением об отладке, эти функции немедленно прерываются и не возвращают значение.

Макросы отладки _RPT, _RPTF вызывают _CrtDbgReport для создания отчетов об отладке. Версии этих макросов с расширенными символами, также как и _ASSERT[E], _RPTWn и _RPTFWn, используют _CrtDbgReportW для создания отчетов об отладке. Если функция _CrtDbgReport или _CrtDbgReportW возвращает значение 1, эти макросы запускают отладчик при условии, что включена JIT-отладка.

Заметки

_CrtDbgReport и _CrtDbgReportW могут отправлять отчет об отладке в три разных назначения: файл отчета об отладке, монитор отладки (отладчик Visual Studio) или окно с сообщением об отладке. Две функции настройки, _CrtSetReportMode и _CrtSetReportFile, используются для задания назначения (назначений) для каждого типа отчета. Эти функции позволяют управлять назначением или назначениями для каждого типа отчета по отдельности. Например, можно указать, что reportType типа _CRT_WARN можно отправлять только в монитор отладки, а reportType типа _CRT_ASSERT — в окно с сообщением об отладке и пользовательский файл отчета.

_CrtDbgReportW — версия _CrtDbgReport с расширенными символами. Все выходные данные и параметры строки отображаются как строки расширенных символов; в противном случае — аналогично версии с однобайтовыми символами.

_CrtDbgReport и _CrtDbgReportW создают сообщение для пользователя для отчета об отладке, подставляя аргументы argument[n] в строку format, используя правила, определенные функциями printf и wprintf. Затем эти функции создают отчет об отладке и определяют назначение (назначения) в зависимости от текущих режимов отчета и файла, заданных для reportType. Когда отчет отправляется в окно с сообщением об отладке, filename, lineNumber и moduleName включаются в набор сведений, которые отображаются в окне.

В таблице ниже приведен список доступных вариантов для режима или режимов отчета и файла, а также поведение, которое является результатом функций _CrtDbgReport и _CrtDbgReportW. Эти параметры определены как битовые флаги в <crtdbg.h>.

Режим отчета

Файл отчета

Поведение _CrtDbgReport, _CrtDbgReportW

_CRTDBG_MODE_DEBUG

Неприменимо

Создает сообщение, используя API Windows OutputDebugString.

_CRTDBG_MODE_WNDW

Неприменимо

Вызывает API Windows MessageBox для создания окна сообщения, в котором будет отображаться сообщение вместе с кнопками Прервать, Повторить и Пропустить. Если пользователь нажимает кнопку Прервать, функция _CrtDbgReport или _CrtDbgReport немедленно прерывается. Если пользователь нажимает кнопку Повторить, функция возвращает значение 1. Если пользователь нажимает кнопку Пропустить, выполнение продолжается и функции _CrtDbgReport и _CrtDbgReportW возвращают значение 0. Учтите, что нажатие кнопки Пропустить при наличии условия ошибки часто приводит к возникновению "неопределенного поведения".

_CRTDBG_MODE_FILE

__HFILE

Записывает сообщение в предоставленный пользователем HANDLE, используя API Windows WriteFile, и не проверяет допустимость дескриптора файла; приложение отвечает за открытие файла отчета и передачу допустимого дескриптора файла.

_CRTDBG_MODE_FILE

_CRTDBG_FILE_STDERR

Записывает сообщение в stderr.

_CRTDBG_MODE_FILE

_CRTDBG_FILE_STDOUT

Записывает сообщение в stdout.

Этот отчет можно отправить в одно, два или три назначения (или ни в одно из назначений). Дополнительные сведения о задании режима (режимов) и файла отчета см. в описании функций _CrtSetReportMode и _CrtSetReportFile. Дополнительные сведения об использовании макросов отладки и функций отчетов см. в разделе Макросы для создания отчетов.

Если приложению требуется больше гибкости, чем могут обеспечить функции _CrtDbgReport и _CrtDbgReportW, можно написать собственную функцию создания отчетов и подключить ее к механизму создания отчетов библиотеки времени выполнения языка C, используя функцию _CrtSetReportHook.

Требования

Подпрограмма

Обязательный заголовок

_CrtDbgReport

<crtdbg.h>

_CrtDbgReportW

<crtdbg.h>

_CrtDbgReport и _CrtDbgReportW являются расширениями Майкрософт. Дополнительные сведения см. в разделе Совместимость.

Библиотеки

Только отладочные версии библиотек времени выполнения языка C.

Пример

// crt_crtdbgreport.c
#include <crtdbg.h>

int main(int argc, char *argv[]) {
#ifdef _DEBUG
   _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, argv[0], NULL);
#endif
}

Примеры изменения функций создания отчетов см. в разделе crt_dbg2.

Эквивалент в .NET Framework

См. также

Ссылки

Процедуры отладки

_CrtSetReportMode

_CrtSetReportFile

printf, _printf_l, wprintf, _wprintf_l

_DEBUG