_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、および _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 を返す場合は、Just-In-Time (JIT) デバッグが有効であれば、これらのマクロ デバッガーが開始しています。
解説
_CrtDbgReport および _CrtDbgReportW は、3 種類の宛先へデバッグ レポートを送信できます。デバッグ レポート ファイル、デバッグ モニター (Visual Studio デバッガー)、またはデバッグ メッセージ ウィンドウです。 2 つの構成関数 _CrtSetReportMode および _CrtSetReportFile は、各レポートの種類の出力先を指定するために使用されます。 これらの関数では、各レポートの種類に対するレポートの宛先を個別に管理できます。 たとえば、_CRT_WARN の reportType をデバッグ モニターのみに送信したり、_CRT_ASSERT の reportType をデバッグ メッセージ ウィンドウとユーザー定義のレポート ファイルに送信するよう指定できます。
_CrtDbgReportW 関数は、_CrtDbgReport 関数のワイド文字バージョンです。 すべての出力および文字列のパラメーターは、ワイド文字列内にあり、それ以外の場合は 1 バイト文字バージョンと同じです。
_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 を呼び出して、メッセージおよび [中止]、[再試行]、[無視] の各ボタンを表示するメッセージ ボックスを作成します。 ユーザーが [中止] をクリックすると、_CrtDbgReport または _CrtDbgReport はすぐに中止されます。 ユーザーが [再試行] をクリックすると、1 を返します。 ユーザーが [無視] をクリックすると、実行は継続され、_CrtDbgReport および _CrtDbgReportW は 0 を返します。 エラー状況が存在するときに [無視] をクリックすると、"未定義の動作" という結果になることがよくあります。 |
_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」を参照してください。