デバッグ ルーチン

C ランタイム ライブラリのデバッグ バージョンには数多くの診断サービスがあり、プログラムのデバッグをより簡単に行うことができます。次の作業を行うことができます。

  • デバッグ時にランタイム関数を直接実行します。

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

  • ヒープ割り当てをトレースし、メモリ リークを防止します。

  • ユーザーにデバッグ メッセージをレポートします。

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

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

ルーチン

使用方法

同等の .NET Framework 関数

_ASSERT

式を評価した結果が FALSE のときに、デバッグ レポートを生成します。

System::Diagnostics::Debug::Assert

_ASSERTE

_ASSERT と似ていますが、失敗した式を生成したレポートに含めることができます。

System::Diagnostics::Debug::Assert

_CrtCheckMemory

デバッグ ヒープに割り当てられたメモリ ブロックの整合性を確認します。

System::Diagnostics::PerformanceCounter

_CrtDbgBreak

ブレークポイントを設定します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtDbgReport、_CrtDbgReportW

ユーザー メッセージ付きのデバッグ レポートを生成し、3 つの出力先に送信します。

System::Diagnostics::Debug::WriteSystem::Diagnostics::Debug::WritelineSystem::Diagnostics::Debug::WriteIfSystem::Diagnostics::Debug::WriteLineIf

_CrtDoForAllClientObjects

ヒープ内のすべての _CLIENT_BLOCK 型について、ユーザー定義関数を呼び出します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtDumpMemoryLeaks

重大なメモリ リークが発生すると、デバッグ ヒープのメモリ ブロックをすべてダンプします。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtIsMemoryBlock

指定されたメモリ ブロックがローカル ヒープ内にあり、有効なデバッグ ヒープ ブロック型識別子を持っていることを確認します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtIsValidHeapPointer

指定されたポインターがローカル ヒープ内にあることを確認します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtIsValidPointer

指定されたメモリ範囲が読み出しと書き込み用に有効であることを確認します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtMemCheckpoint

デバッグ ヒープの現在の状態を取得して、アプリケーション指定の _CrtMemState 構造体に格納します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtMemDifference

2 つのメモリ状態の違いを比較し、結果を返します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtMemDumpAllObjectsSince

プログラムの実行開始以降、または指定されたチェックポイント以降のヒープ内のオブジェクトに関する情報をダンプします。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtMemDumpStatistics

指定されたメモリ状態のデバッグ ヘッダー情報をユーザーが判読できる形式でダンプします。

System::Diagnostics::PerformanceCounter

_CrtReportBlockType

指定されたデバッグ ヒープ ブロックへのポインターに関連付けられた、ブロック型またはブロック内部処理形式を返します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetAllocHook

クライアント定義の割り当て関数を C ランタイム デバッグのメモリ割り当てプロセスにフックして組み込みます。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetBreakAlloc

ブレークポイントを指定されたオブジェクト割り当て順序番号に設定する。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetDbgFlag

_crtDbgFlag フラグの状態を取得または変更し、デバッグ ヒープ マネージャーの割り当て動作を制御します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetDumpClient

デバッグ ダンプ関数を呼び出して _CLIENT_BLOCK 型のメモリ ブロックをダンプするたびに呼び出すアプリケーション定義関数を組み込みます。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetReportFile

_CrtDbgReport が固有のレポートの種類の出力先として使用するファイルまたはストリームを識別します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetReportHook

クライアント定義のレポート関数を C ランタイム デバッグのレポート プロセス中にフックして組み込みます。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetReportHook2、_CrtSetReportHookW2

クライアント定義のレポート関数を C ランタイム デバッグのレポート プロセスにフックして組み込んだり組み込みを解除したりします。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_CrtSetReportMode

_CrtDbgReport が生成する固有のレポートの種類の一般的な出力先を指定します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_RPT[0,1,2,3,4]

書式文字列と可変個の引数で _CrtDbgReport を呼び出してデバッグ レポートを生成することで、アプリケーションの進行状況を追跡します。 ソース ファイルおよび行番号の情報は表示しません。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_RPTF[0,1,2,3,4]

_RPTn のマクロに似ていますが、レポートの要求元のソース ファイル名と行番号を表示します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_calloc_dbg

デバッグ ヘッダーと上書きバッファー用の領域と共に指定された数のメモリ ブロックをヒープに割り当てます。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_expand_dbg

ヒープ内の指定されたメモリ ブロックを拡張または縮小して、サイズの変更を行います。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_free_dbg

ヒープ内のメモリ ブロックを解放します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_fullpath_dbg、_wfullpath_dbg

_malloc_dbg でメモリを割り当てて、指定された相対パス名に対応する絶対パス名、つまり完全パス名を作成します。

System::IO::File::Create

_getcwd_dbg、_wgetcwd_dbg

_malloc_dbg でメモリを割り当てて、現在の作業ディレクトリを取得します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_malloc_dbg

デバッグ ヘッダーと上書きバッファー用の領域と共にメモリ ブロックをヒープに割り当てます。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_msize_dbg

ヒープ内のメモリ ブロックのサイズを計算します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_realloc_dbg

指定されたメモリ ブロックを移動またはサイズ変更して、ヒープに再度割り当てます。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

_strdup_dbg、_wcsdup_dbg

_malloc_dbg でメモリを割り当てて、文字列を複製します。

System::String::Clone

_tempnam_dbg、_wtempnam_dbg

_malloc_dbg でメモリを割り当てて、一時ファイルの作成に使用できる名前を生成します。

該当なし 標準 C 関数を呼び出すには、PInvoke を使用します。 詳細については、「プラットフォーム呼び出しの例」を参照してください。

デバッグ ルーチンを使用すると、ほとんどの C ランタイム ルーチンについても、デバッグ処理中にソース コードをステップ実行できます。 ただし、Microsoft 社が権利を所有する技術が含まれている C ランタイム ルーチンのソース コードは公開されていません。 ソース コードを公開していない C ランタイム ルーチンのほとんどは、例外処理ルーチンのカテゴリまたは浮動小数点サポートのカテゴリに分類されますが、その他のカテゴリに属するルーチンにでも同様にソース コードが公開されていない場合があります。 これらのルーチンを次の表に示します。

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

acos、acosf

_fpclass

_nextafter

asin

_fpieee_flt

pow

atan、atan2

_fpreset

printf、_printf_l、wprintf、_wprintf_l, printf_s、_printf_s_l、wprintf_s、_wprintf_s_l*

_cabs

frexp

_scalb

ceil

_hypot

scanf、_scanf_l、wscanf、_wscanf_l, scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l*

_chgsign、_chgsignl

_isnan

setjmp

_clear87、_clearfp

_j0

sin

_control87、_controlfp、__control87_2

_j1

sinh

_copysign、_copysignl

_jn

sqrt

cos

ldexp

_status87、_statusfp

cosh

log

tan

Exp

log10

tanh

fabs

_logb

_y0

_finite

longjmp

_y1

floor

_matherr

_yn

fmod

modf

 

*   大部分のソース コードが使用できます。ただし、内部的に呼び出している別のルーチンのソース コードは公開されていません。

C ランタイム関数および C++ 演算子には、デバッグ ビルドのアプリケーションで呼び出される場合に異なる動作を実行する演算子があります。 アプリケーションのデバッグ ビルドを実行するには、_DEBUG フラグを定義しておくか、デバッグ バージョンの C ランタイム ライブラリとリンクします。通常、動作が異なるのは、デバッグ プロセスをサポートするルーチンに用意されている補足機能または補足情報に関する部分です。 これらのルーチンを次の表に示します。

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

C abort ルーチン

C++ delete 演算子

C assert ルーチン

C++ new 演算子

上記の表に記載されている C++ 演算子のデバッグ バージョンの使い方については、「C++ でのデバッグ ヒープ」を参照してください。

参照

参照

カテゴリ別ランタイム ルーチン

ランタイム エラー チェック