デバッグ メッセージのあるレポートを生成し、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、および _CRT_ASSERT。
filename
アサート/レポートが発生したソース ファイル名へのポインターまたは NULL。
lineNumber
アサート/レポートが発生したソース ファイル名の行番号または NULL。
moduleName
アサートまたはレポートが発生したモジュール (.exe または .dll) 名へのポインター。
format
ユーザー メッセージの作成に使用される書式指定文字列へのポインター。
argument
format で使用される省略可能な代用引数。
戻り値
すべてのレポートの宛先について、エラーが発生した場合は -1、エラーが発生しなかった場合は 0 を返 _CrtDbgReport と _CrtDbgReportW 。 ただし、レポートの宛先がデバッグ メッセージ ウィンドウで、ユーザーが [ Retry ] ボタンを選択すると、これらの関数は 1 を返します。 ユーザーが [デバッグ メッセージ] ウィンドウで Abort ボタンを選択した場合、これらの関数はすぐに中止され、値は返されません。
デバッグ マクロ_RPTF_RPTは、_CrtDbgReportを呼び出してデバッグ レポートを生成します。 これらのマクロのワイド文字バージョンは、 _ASSERT、 _ASSERTE、 _RPTW 、および _RPTFWと共に、 _CrtDbgReportW を使用してデバッグ レポートを生成します。 _CrtDbgReportまたは_CrtDbgReportWが 1 を返すと、Just-In-Time (JIT) デバッグが有効になっている場合、これらのマクロによってデバッガーが起動されます。
解説
_CrtDbgReport および _CrtDbgReportW は、デバッグ レポート ファイル、デバッグ モニター (Visual Studio デバッガー)、またはデバッグ メッセージ ウィンドウの 3 つの異なる宛先にデバッグ レポートを送信できます。 _CrtSetReportModeと_CrtSetReportFileの 2 つの構成関数を使用して、各レポートの種類の宛先または宛先を指定します。 これらの関数では、各レポートの種類に対するレポートの宛先を個別に管理できます。 たとえば、_CRT_WARNのreportTypeがデバッグ モニターにのみ送られ、_CRT_ASSERTのreportTypeがデバッグ メッセージ ウィンドウとユーザー定義レポート ファイルの両方に送信されるように指定できます。
_CrtDbgReportW 関数は、_CrtDbgReport 関数のワイド文字バージョンです。 すべての出力パラメーターと文字列パラメーターはワイド文字列に含まれています。それ以外の場合は、1 バイト文字バージョンと同じです。
_CrtDbgReport_CrtDbgReportWprintfまたは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 され、0 _CrtDbgReportW 返されます。 エラー条件が存在する場合に Ignore を選択すると、多くの場合、未定義の動作が発生します。 |
_CRTDBG_MODE_FILE |
__HFILE |
Windows WriteFile API を使用して、ユーザー指定のHANDLEにメッセージを書き込み、ファイル ハンドルの有効性を確認しません。アプリケーションはレポート ファイルを開き、有効なファイル ハンドルを渡す役割を担います。 |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDERR |
stderr にメッセージを書き込みます。 |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDOUT |
stdout にメッセージを書き込みます。 |
レポートは 1 つ、2 つ、または 3 つの宛先に送信できます。またどの宛先にも送信しないこともできます。 レポート モードまたはモードとレポート ファイルの指定の詳細については、 _CrtSetReportMode および _CrtSetReportFile 関数を参照してください。 デバッグ マクロとレポート関数の使用の詳細については、「レポート用のマクロのを参照してください。
アプリケーションで _CrtDbgReport や _CrtDbgReportWによって提供される柔軟性よりも高い柔軟性が必要な場合は、独自のレポート関数を記述し、 _CrtSetReportHook 関数を使用して C ランタイム ライブラリ レポート メカニズムにフックできます。
要件
| ルーチンによって返される値 | 必須ヘッダー |
|---|---|
_CrtDbgReport |
<crtdbg.h> |
_CrtDbgReportW |
<crtdbg.h> |
_CrtDbgReport および _CrtDbgReportW は Microsoft 拡張機能です。 詳細については、「互換性」をご覧ください。
ライブラリ
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 を参照してください。
関連項目
デバッグ ルーチン
_CrtSetReportMode
_CrtSetReportFile
printf、 _printf_l、 wprintf、 _wprintf_l
_DEBUG