デバッグ ルーチン

C ランタイム ライブラリのデバッグ バージョンには、プログラムのデバッグを容易にする多くの診断サービスが用意されており、開発者は次のことが可能になります。

  • デバッグ中にランタイム関数に直接ステップ インする

  • アサーション、エラー、および例外を解決する

  • ヒープ割り当てを追跡し、メモリ リークを防ぐ

  • ユーザーにデバッグ メッセージを報告する

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

これらのルーチンを使用するには、フラグを _DEBUG 定義する必要があります。 これらのルーチンはすべて、アプリケーションの製品版ビルドでは何も行いません。 新しいデバッグ ルーチンの使用方法の詳細については、「CRT デバッグ手法」を参照してください

ルーチンによって返される値 使用
_ASSERT 式を評価し、結果が次の場合にデバッグ レポートを生成します。 FALSE
_ASSERTE _ASSERT に似ていますが、生成されるレポートに失敗した式が含まれます
_CrtCheckMemory デバッグ ヒープに割り当てられたメモリ ブロックの整合性を確認します
_CrtDbgBreak ブレークポイントを設定します。
_CrtDbgReport, _CrtDbgReportW ユーザー メッセージのあるデバッグ レポートを生成し、3 つの宛先にレポートを送信します
_CrtDoForAllClientObjects ヒープ内のすべての _CLIENT_BLOCK 型に対して、アプリケーションによって提供される関数を呼び出します
_CrtDumpMemoryLeaks 重大なメモリ リークが発生したときに、デバッグ ヒープ内のすべてのメモリ ブロックをダンプします
_CrtIsMemoryBlock 指定されたメモリ ブロックがローカル ヒープ内にあり、有効なデバッグ ヒープ ブロック型識別子が設定されていることを確認します
_CrtIsValidHeapPointer 指定したポインターがローカル ヒープ内にあることを検証します
_CrtIsValidPointer 指定したメモリ範囲で読み取りおよび書き込みが可能であることを確認します
_CrtMemCheckpoint デバッグ ヒープの現在の状態を取得し、アプリケーションが指定した _CrtMemState 構造体に格納します
_CrtMemDifference 2 つのメモリ状態の大幅な違いを比較し、結果を返します
_CrtMemDumpAllObjectsSince 指定されたチェックポイントの取得以降、またはプログラムの実行開始以降の、ヒープ上のオブジェクトに関する情報をダンプします
_CrtMemDumpStatistics 指定されたメモリ状態のデバッグ ヘッダー情報をユーザーが判読できる形式でダンプします
_CrtReportBlockType 特定のデバッグ ヒープ ブロック ポインターに関連付けられたブロックの型および細分化された型を返します。
_CrtSetAllocHook C ランタイム デバッグ メモリ割り当てプロセスにフックして、クライアント定義割り当て関数をインストールします
_CrtSetBreakAlloc 指定されたオブジェクト割り当て順序番号にブレークポイントを設定します
_CrtSetDbgFlag _crtDbgFlag フラグの状態を取得または変更して、デバッグ ヒープ マネージャーの割り当て動作を制御します
_CrtSetDumpClient _CLIENT_BLOCK 型のメモリ ブロックをダンプするためにデバッグ ダンプ関数が呼び出されるたびに呼び出されるアプリケーション定義関数をインストールします
_CrtSetReportFile _CrtDbgReport による特定の種類のレポートの出力先として使用されるファイルまたはストリームを特定します
_CrtSetReportHook C ランタイム デバッグ レポート プロセスにフックして、クライアント定義レポート関数をインストールします
_CrtSetReportHook2, _CrtSetReportHookW2 C ランタイム デバッグ レポート プロセスにフックして、クライアント定義レポート関数をインストールまたはアンインストールします。
_CrtSetReportMode _CrtDbgReport によって生成される特定の種類のレポートの一般的な出力先を指定します
_RPT[0,1,2,3,4] 書式指定文字列と可変数の引数と共に _CrtDbgReport を呼び出してデバッグ レポートを生成することによって、アプリケーションの進行状況を追跡します。 ソース ファイルと行番号の情報は提供されません。
_RPTF[0,1,2,3,4] _RPTn マクロに似ていますが、レポート要求の発生元となったソース ファイル名と行番号を提供します
_calloc_dbg デバッグ ヘッダーと上書きバッファー用の余分な領域を使用して、ヒープに指定された数のメモリ ブロックを割り当てます
_expand_dbg ブロックの拡張や縮小によって、ヒープ内の指定されたメモリのブロックをサイズ変更します
_free_dbg ヒープ上のメモリのブロックを解放します
_fullpath_dbg, _wfullpath_dbg 指定された相対パス名の絶対または完全パス名を作成します。メモリを割り当てるために、_malloc_dbg が使用されます。
_getcwd_dbg, _wgetcwd_dbg 現在の作業ディレクトリを取得します。メモリを割り当てるために、_malloc_dbg が使用されます。
_malloc_dbg デバッグ ヘッダー用の余分な領域を持つメモリ ブロックをヒープに割り当て、バッファーを上書きする
_msize_dbg ヒープ内のメモリ ブロックのサイズを計算します
_realloc_dbg ブロックの移動やサイズ変更によって、ヒープ内の指定されたメモリのブロックを再割り当てします
_strdup_dbg, _wcsdup_dbg 文字列を複製します。メモリを割り当てるために、_malloc_dbg が使用されます。
_tempnam_dbg, _wtempnam_dbg 一時ファイルを作成するために使用できる名前を生成します。メモリを割り当てるために、_malloc_dbg が使用されます。

ソース コード形式で使用できない C ランタイム ルーチン

デバッガーを使用して、デバッグ プロセス中にほとんどの C ランタイム ルーチンのソース コードをステップ実行することができます。 ただし、Microsoft では一部のテクノロジを独自のテクノロジと見なしているため、これらのルーチンのサブセットのソース コードは提供されません。 これらのルーチンのほとんどは例外処理または浮動小数点処理のグループに属していますが、他のグループに属しているものもあります。 次の表は、これらのルーチンの一覧です。

ソース コードはほとんどのルーチンでscanf使用できますが、ソース コードが提供されていない別のprintfルーチンに対して内部呼び出しを行います。

アプリケーションのデバッグ ビルドでは動作が異なるルーチン

一部の C ランタイム関数と C++ 演算子は、アプリケーションのデバッグ ビルドから呼び出されたときの動作が異なります。 (フラグを定義 _DEBUG するか、C ランタイム ライブラリのデバッグ バージョンとリンクすることで、アプリケーションのデバッグ ビルドを作成できます)。通常、動作の違いは、デバッグ プロセスをサポートするためにルーチンによって提供される追加の機能または情報で構成されます。 次の表は、これらのルーチンの一覧です。

C の abort ルーチン

C の assert ルーチン

C++ の delete 演算子

C++ の new 演算子

関連項目

カテゴリ別ユニバーサル C ランタイム ルーチン
ランタイム エラー チェック