UMDH の使用の準備

ユーザー モード ダンプ ヒープ (UMDH) を使用してプロセスのヒープ割り当てをキャプチャする前に、このセクションで説明されている構成タスクを完了する必要があります。 コンピューターが正しく構成されていない場合、UMDH は結果を生成しないか、結果が不完全または正しくありません。

ユーザーモードのスタック トレース データベースを作成する

UMDH を使用してプロセスのヒープ割り当てをキャプチャする前に、スタック トレースをキャプチャするように Windows を構成する必要があります。

プロセスのスタック トレース キャプチャを有効にするには、 GFlags を使用してプロセスの ユーザー モード スタック トレース データベースの作成 フラグを設定します。 これは、次のいずれかの方法で実行できます。

  • GFlags グラフィカル インターフェイスで、 イメージ ファイル タブを選択します。ファイル名拡張子 (たとえば、メモ帳.exe) を含むプロセス名を入力します。 Tab キーを押し、 ユーザー モード スタック トレース データベースの作成] を選択し、 適用] を選択します。

  • または、同様に、次の GFlags コマンド ラインを使用します ImageName はプロセス名 (ファイル名拡張子を含む) です。

    gflags /i ImageName +ust

既定では、Windows が収集するスタック トレース データの量は、x86 プロセッサでは 32 MB (メガバイト)、x64 プロセッサでは 64 MB (メガバイト)に制限されます。 このデータベースのサイズを大きくする必要がある場合は、GFlags グラフィカル インターフェイスの イメージ ファイル タブを選択し、プロセス名を入力し、 Tab キー を押して、 スタック バックトレース (Megs) チェック ボックスをチェックし、関連付けられたテキスト ボックスに値 (MB (メガバイト)) を入力して、 適用] を選択します。

注: 必要な場合にのみ、このデータベースを増やしてください。これは、限られた Windows リソースを使い果たす可能性があるためです。 サイズを大きくする必要がなくなったら、この設定を元の値に戻します。

これらの設定は、プログラムのすべての新しいインスタンスに影響します。 現在実行中のプログラムのインスタンスには影響しません。

必要なシンボルにアクセスする

UMDH を使用する前に、アプリケーションの適切なシンボルにアクセスできる必要があります。 UMDH は、環境変数_NT_SY MB (メガバイト)OL_PATHで指定されたシンボル パスを使用します。 この変数は、アプリケーションのシンボルを含むパスと同じ値に設定します。

Windows シンボルへのパスも含める場合は、分析が完了している可能性があります。 このシンボル パスの構文は、デバッガーで使用される構文と同じです。詳細については、「 シンボル パス」を参照してください。

たとえば、アプリケーションのシンボルが C:\MyApp\Symbols にあり、Windows シンボル ファイルを \\myshare\winsymbols にインストールしている場合は、次のコマンドを使用してシンボル パスを設定します。

set _NT_SYMBOL_PATH=c:\myapp\symbols;\\myshare\winsymbols

別の例として、アプリケーションのシンボルが C:\MyApp\Symbols にあり、C:\MyCache をダウンストリーム ストアとして使用して Windows シンボルにパブリック Microsoft シンボル ストアを使用する場合は、次のコマンドを使用してシンボル パスを設定します。

set _NT_SYMBOL_PATH=c:\myapp\symbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols

重要 2 台のコンピュータがあるとします。1 つは UMDH ログを作成する ログ コンピュータ 、もう 1 つは UMDH ログを分析する 分析コンピュータ です。 分析コンピューターのシンボル パスは、ログが作成された時点でログ コンピューターに読み込まれた Windows のバージョンのシンボルを指している必要があります。 分析コンピューター上のシンボル パスをシンボル サーバーにポイントしないでください。 その場合、UMDH は分析コンピューターで実行されている Windows のバージョンのシンボルを取得し、UMDH には意味のある結果が表示されません。

BSTRキャッシュの無効化

オートメーション (旧称 OLE オートメーション) は、BSTR 文字列で使用されるメモリをキャッシュします。 これにより、UMDH がメモリ割り当ての所有者を正しく判断できなくなる可能性があります。 この問題を回避するには、BSTR キャッシュを無効にする必要があります。

BSTR キャッシュを無効にするには、OANOCACHE 環境変数を 1 に設定します。 この設定は、割り当てをトレースするアプリケーションを起動する前に行う必要があります。

または、.NET Framework SetNoOaCache 関数を呼び出すことによって、アプリケーション自体から BSTR キャッシュを無効にすることもできます。 SetNoOaCache の呼び出し時に既にキャッシュされている BSTR 割り当てが再びキャッシュされるため、このメソッドを選択した場合は、この関数を早期に呼び出メイン必要があります。

サービスによって行われた割り当てをトレースする必要がある場合は、OANOCACHE をシステム環境変数として設定し、この設定を有効にするために Windows を再起動する必要があります。

プロセス ID を見つける

UMDH は、プロセス識別子 (PID) によってプロセスを識別します。 タスク マネージャー、タスク リスト、または TList を使用して、実行中のプロセスの PID を見つけることができます。