_CrtDbgReport、_CrtDbgReportW

デバッグ メッセージを表示したレポートを生成し、対象となる 3 つの出力先にレポートを送信します (デバッグ バージョンだけ)。

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, and _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 を使用してデバッグ レポートを生成します。 JIT (Just-In-Time) デバッグが有効になっている場合に _CrtDbgReport または _CrtDbgReportW が 1 を返すと、このマクロはデバッガーを起動します。

解説

_CrtDbgReport・_CrtDbgReportWデバッグ レポートの 3 つの異なる宛先に送信することができます。デバッグ レポート ファイル、デバッグ モニター (、Visual Studioデバッガー)、または、デバッグ メッセージ ウィンドウ。 出力先をレポートの種類ごとに指定するために、_CrtSetReportMode_CrtSetReportFile の 2 つの設定関数が使用されます。 これらの関数を使用すると、1 つ以上の出力先をレポートの種類に応じて個別に制御できます。 たとえば、reportType が _CRT_WARN の場合はレポートをデバッグ モニターのみに送信し、reportType が _CRT_ASSERT の場合はレポートをデバッグ メッセージ ウィンドウとユーザー定義のレポート ファイルに送信するように指定できます。

_CrtDbgReportW 関数は、_CrtDbgReport 関数のワイド文字バージョンです。 すべての出力と文字列パラメーターはワイド文字列です。それ以外はバイト文字バージョンと同じです。

_CrtDbgReport と _CrtDbgReportW は、printf 関数または wprintf 関数で定義した規則と同じ規則を使用し、argument[n] の引数を format の文字列に置き換えることによって、デバッグ レポートに表示するユーザー メッセージを作成します。 これらの関数はデバッグ レポートを生成し、現在のレポート モードと reportType で定義されているレポート ファイルに基づいて出力先を決定します。 デバッグ メッセージ ウィンドウにレポートが送信されると、ウィンドウには filename、lineNumber、および moduleName の情報が表示されます。

選択できるレポート モード、レポート ファイル、および _CrtDbgReport と _CrtDbgReportW の動作結果を次の表に一覧表示します。 これらのオプションは、Crtdbg.h でビット フラグとして定義されています。

レポート モード

レポート ファイル

_CrtDbgReport、_CrtDbgReportW の動作

_CRTDBG_MODE_DEBUG

適用なし

Windows OutputDebugString API にメッセージを書き込みます。

_CRTDBG_MODE_WNDW

適用なし

Windows MessageBox API を呼び出し、メッセージ ボックスを作成します。メッセージ ボックスには、メッセージと [Abort]、[Retry]、[Ignore] の各ボタンが表示されます。 ユーザーが [Abort]、[_CrtDbgReport]、または [_CrtDbgReport] をクリックすると、処理は即座に中止されます。 [Retry] をクリックすると 1 が返され、 [Ignore] をクリックすると実行は続行され、_CrtDbgReport と _CrtDbgReportW の場合は 0 が返されます。 エラー状態のときに [Ignore] をクリックすると、"未定義の動作" が実行される場合があることに注意してください。

_CRTDBG_MODE_FILE

__HFILE

Windows WriteFile API を使用し、ユーザーが指定した HANDLE にメッセージを書き込みます。ファイル ハンドルの有効性が検査されないため、レポート ファイルのオープンおよび有効なファイル ハンドルの引き渡しはアプリケーション側で実行する必要があります。

_CRTDBG_MODE_FILE

_CRTDBG_FILE_STDERR

メッセージを stderr に書き込みます。

_CRTDBG_MODE_FILE

_CRTDBG_FILE_STDOUT

メッセージを stdout に書き込みます。

レポートの送信先には、0 ~ 3 か所を指定できます。 レポート モードとレポート ファイルの指定の詳細については、「_CrtSetReportMode」および「_CrtSetReportFile」の各関数を参照してください。 デバッグ マクロおよびレポート関数の使い方の詳細については、「レポート用マクロの使用」を参照してください。

アプリケーションで _CrtDbgReport と _CrtDbgReportW よりさらに柔軟な設定が必要な場合は、独自のレポート関数を作成し、_CrtSetReportHook 関数を使用して C ランタイム ライブラリのレポート機構にフックしてください。

必要条件

ルーチン

必須ヘッダー

_CrtDbgReport

<crtdbg.h>

_CrtDbgReportW

<crtdbg.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

C ランタイム ライブラリのデバッグ バージョンのみ。

使用例

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

int main() {
#ifdef _DEBUG
   CrtDbgReport(_CRT_ASSERT, NULL, NULL, "some module", NULL);
#endif
}

レポート関数を変更する方法の例については、「crt_dbg2 サンプル : C ランタイムのデバッグのフック関数」を参照してください。

同等の .NET Framework 関数

参照

参照

デバッグ ルーチン

_CrtSetReportMode

_CrtSetReportFile

printf、_printf_l、wprintf、_wprintf_l

_DEBUG