診断サービス
Microsoft Foundation Class ライブラリには、プログラムのデバッグを簡単にする、さまざまな診断サービスが用意されています。 診断サービスには、プログラムでのメモリの割り当てのトラック、実行時のオブジェクト内容のダンプ、および実行時のデバッグ メッセージの表示を可能にするマクロやグローバル関数があります。 診断サービスのためのマクロとグローバル関数は、次のカテゴリに分類されます。
一般的な診断マクロ
一般的な診断関数と変数
オブジェクト診断関数
これらのマクロや関数は、MFC ライブラリのデバッグ バージョンとリリース バージョンで CObject から派生したすべてのクラスで利用できます。 ただし、DEBUG_NEW と VERIFY を除くマクロや関数はリリース バージョンでは機能しません。
デバッグ ライブラリでは、割り当てられるすべてのメモリ ブロックは "ガード バイト" の列で囲まれます。これらのバイトが誤ったメモリ書き込みで壊された場合は、診断ルーチンで問題点をレポートできます。 実装ファイルに次の行を含めると、new として呼び出されているすべての箇所で、メモリを割り当てたファイル名と行番号が保存されます。
#define new DEBUG_NEW
関数 CMemoryState::DumpAllObjectsSince は追加情報を表示し、メモリ リークを識別できます。 診断出力の詳細については、CDumpContext クラスも参照してください。
また、C ランタイム ライブラリでも、アプリケーションのデバッグに使用できる一連の診断関数がサポートされます。 詳細については、「ランタイム ライブラリ リファレンス」の「デバッグ ルーチン」を参照してください。
MFC の一般的な診断マクロ
ライブラリのデバッグ バージョンで、指定された式が FALSE のときに、メッセージを出力しプログラムの実行を中止します。
オブジェクトが、指定されたクラスのオブジェクトかどうか、または指定されたクラスから派生したクラスのオブジェクトかどうかを確認します。
AssertValid メンバー関数を呼び出すことにより、オブジェクトの内部構造が正しいかどうかを調べます。通常、AssertValid メンバー関数は CObject からオーバーライドします。
デバッグ モードですべてのオブジェクトのメモリ割り当て状態をファイル名と行番号で示すことにより、メモリ リークの発見を助けます。
ASSERT と同じ機能を持ちますが、式の値は確認しません。デバッグ モードでだけ実行するコードで役立ちます。
ライブラリのデバッグ バージョンで、printf 関数と同じ機能を提供します。
ASSERT と同じ機能を持ちますが、デバッグ バージョンでもリリース バージョンでも式を評価します。
MFC の一般的な診断変数と関数
CDumpContext 情報をデバッガー出力ウィンドウまたはデバッグ端末へ送るグローバル変数です。
デバッグ時のメモリ アロケーターの動作を制御するグローバル変数です。
渡された SCODE がエラーかどうかを調べるためのグローバル変数です。エラーの場合は、該当するエラーがスローされます。
現在割り当てされているメモリの整合性を調べます。
デバッガーで呼び出されると、デバッグ中にオブジェクトの状態をダンプします。
現在のスタックのイメージを生成します。 この関数は必ず静的にリンクします。
メモリ リークのダンプを有効にします。
メモリ トラッキングのオンとオフを切り替えます。
メモリ ブロックが正しく割り当てられているかどうかを調べます。
メモリのアドレス範囲がプログラムの境界内にあるかどうかを調べます。
文字列へのポインターが正しいかどうかを調べます。
メモリ割り当て時に、指定された関数の呼び出しを可能にします。
MFC のオブジェクト診断関数
ランタイム型チェックをサポートするすべての CObject 派生クラスで、指定された関数を実行します。
new で割り当てられたすべての CObject 派生クラスのオブジェクトで、指定された関数を実行します。