次の方法で共有


シンボルのサポート

Windows パフォーマンス アナライザー (WPA) が正しく構成されている場合、WPA には、記録で見つかったアドレスのシンボル ファイルからのシンボリック名が表示されます。

シンボルをデコードするには、プログラム データベース ファイル (プログラム データベース (PDB) ファイルまたはシンボル ファイルと呼ばれる) を検索して、完全な呼び出し履歴を構築する必要があります。 コンパイラとリンカーは、システムがコンポーネントをビルドするときに PDB ファイルを生成します。 Microsoft では、オンライン シンボル サーバー内の多くの Microsoft 製品のプログラム データベース ファイルを提供しています。 Microsoft Debugging Tools for Windows および WPA は、オンライン シンボル サーバーを使用してシンボル情報を検索します。 そのため、シンボル ファイルがローカルにコピーされていない場合は、コンピューターをインターネットに接続する必要があります。 Windows Performance Toolkit は Windows デバッガー Windbg.exe と同じシンボル デコード インフラストラクチャを使用します。 詳細については、「WinDbg」を参照してください。

シンボルのサポートを構成するには、_NT_SYMBOL_PATH 環境変数を定義する必要があります。 次の例では、C:\symbols のダウンストリーム ストアと共に Microsoft パブリック シンボル サーバーを使用するシンボル パスを設定します。

set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols

この例は 1 つのコマンド ラインであることに注意してください。

このシンボル パスの URL は、オンラインの Microsoft シンボル サーバーを指定します。 アスタリスクの間のパス (C:\symbols) は、ダウンストリーム ストアを指定します。 これは、シンボル解決システムがシンボル ファイルを保持するローカル キャッシュです。 WPA ツールでは、開発したコンポーネントからのシンボルもデコードされます。 記録するコンポーネントの PDB ファイルを含む _NT_SYMBOL_PATH に 1 つ以上のパスを追加します。 たとえば、次の例は、前の例に対してパスがどのように設定されたのか示しています。

set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*

Xperf または WPA がシンボルをデコードすると、Xperf または WPA は、元のシンボル ファイル (PDB) の圧縮バージョンを \symcache ディレクトリのディスクにキャッシュします。 これを行うために、Xperf または WPA により、その時点で使用可能なシンボルが使用されます。 Microsoft の外部で使用できるオペレーティング システム シンボルは、パブリック シンボルです。 これらのシンボルには、内部プライベート シンボルよりも少ない情報が含まれています。 ブラックボックス テストでは、パブリック シンボルに正しくない情報が含まれる場合があります。 より信頼性の高いプライベート シンボルは、秘密保持契約書に基づいて取得できます。 ユーザーがパブリック シンボルを使用して記録をデコードし、ユーザーがプライベート シンボルを取得した場合、Xperf または WPA が新しいプライベート シンボルを検出する前に、ユーザーは \symcache ディレクトリをクリアする必要があります。

シンボル デコードのトラブルシューティング

シンボル デコードのサポートは複雑です。 次の要件を満たす必要があります。

  • 記録を開いた後、Xperf コマンド ラインで -symbols を指定するか、WPA の [トレース] メニューで [シンボルの読み込み] を選択する必要があります。

  • 環境変数は正しく構成する必要があります。 Xperf の詳細については、「シンボル」を参照してください。

  • ETW カーネル記録ファイルが停止され、正しくマージされている必要があります。 詳細については、「記録の停止」を参照してください。

  • Windows Performance Recorder (WPR) または WPA は、ETW ユーザー記録ファイルを、同じコンピューター上で同時に作成されるカーネル記録ファイルとマージします。

  • _NT_SYMBOL_PATH によって指定されるバイナリおよびシンボル ソースにアクセスできる必要があります。 シンボル サーバーを使用する場合、シンボル サーバーは多くの場合、単なるリダイレクターです。 この場合は、シンボル サーバーと、バイナリとシンボルをホストするシンボル サーバーが参照するサイトの両方にアクセスできる必要があります。

  • _NT_SYMBOL_PATH は正しいファイルを指している必要があります。 異なるビルドやアーキテクチャのファイルが存在する場合、そのファイルは機能しません。 アプリケーション バイナリ ファイルのバージョンが、_NT_SYMBOL_PATH が参照するシンボルと同じバージョンではない場合は、呼び出し履歴を表示できません。

    シンボルの不一致を排除するには、Debugging Tools for Windows ディストリビューションの Symchk.exe を使用して、記録が実行されたコンピューター上のシンボル ファイルとシンボルが一致することを確認します。 次に例を示します。

    symchk /v <local_file> /s <sympath_to_name.pdb>
    

    バイナリの不一致を排除するには、fc /b コマンドを使用して、記録が実行されたコンピューター上のバイナリが、ドロップ共有のバイナリと一致することを確認します。 次に例を示します。

    fc /b <local_file> <drop_share_file>
    
  • Xperf では、少なくとも PROC_THREAD+LOADER フラグを使用して ETW カーネル記録をキャプチャする必要があります。 これらのフラグは、プロセス メモリ内のプロセスの有効期間とイメージの仮想アドレス範囲に関する基本情報を提供します。 この情報は、XPerf が仮想アドレスをイメージとシンボルにデコードするのに役立ちます。

    ETW カーネル記録でこれらのフラグが有効になっていることを確認するには、次のコマンドを使用して生成されるテーブルに Xperf プロセス イベント (作成削除ランダウンの開始ランダウンの終了) およびイメージ イベント (読み込み読み込み解除ランダウンの開始ランダウンの終了) が存在することを確認します。

    xperf -i kernel.etl -a tracestats -detail
    

    注意 これらのイベントが発生したかどうかによって、これらのすべてのイベントがテーブルに一覧表示されない場合があります。

Xperf シンボル デコードの制限事項

実行可能イメージ (たとえば、\Path\Library.dll など) にドライブが指定されていない場合、Xperf は既定でシステム ドライブを使用します。 -d/-merge コマンドを実行すると、記録中に実行中のプロセスに存在する実行可能イメージが Xperf で見つからない場合、Xperf は対応するイメージとシンボル ファイルの ID 情報を取得できず、マージされた記録に情報を追加できません。 この情報がない場合、Xperf は、その記録内のそのイメージのシンボル デコードを実行できません。

この問題は、ディスク I/O やファイル I/O のパスなど、他のファイル パスには影響を与えません。

シンボル デコードを有効にし、Xperf ETW 記録で正しいイメージの読み込みパスおよび読み込み解除パスを有効にするには、シンボル デコードまたはイメージの読み込みパスおよび読み込み解除パスが必要になる可能性があるすべての実行可能イメージをシステム ドライブに格納する必要があります。 次に、そのドライブからイメージを実行します。 それができない場合は、別のドライブからイメージを実行する場合でも、システム ドライブ上にイメージのミラーを作成します。 たとえば、C: がシステム ドライブの場合は、C:\game\bin\binkw32.dllD:\game\bin\binkw32.dll の同じコピーを作成します。

Windows パフォーマンス ツールキット

symbols

CLR 4.0 NGEN PDB のサポートを使用する

一般的な詳細分析の問題