次の方法で共有


Windows デバッガーのシンボル パス

シンボル パスは、WinDbg、KD、CDB、NTST などの Windows デバッガーがシンボル ファイルを検索する場所を指定します。 シンボルとシンボル ファイルの詳細については、シンボルを参照してください。

Microsoft Visual Studio を含む一部のコンパイラは、バイナリ ファイルと同じディレクトリにシンボル ファイルを配置します。 シンボル ファイルとチェックされたバイナリ ファイルには、パスとファイル名の情報が含まれています。これにより、デバッガーはシンボル ファイルを自動的に検索できます。 実行可能ファイルがビルドされたコンピューターでユーザー モード プロセスをデバッグし、シンボル ファイルが元の場所にある場合、デバッガーはシンボル パスを設定せずにシンボル ファイルを見つけることができます。

その他のほとんどの状況では、シンボル ファイルの場所を指すようにシンボル パスを設定する必要があります。

ヒント

.symfix 使用して、多くの状況で適切に動作するパブリック Microsoft パブリック シンボル サーバーへの既定のパスを設定します。

シンボル パスの構文

デバッガーのシンボル パスは、セミコロンで区切られた複数のディレクトリ パスで構成される文字列です。 たとえば、C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirBします。

相対パスがサポートされています。 ただし、常に同じディレクトリからデバッガーを起動しない限り、各パスの前にドライブ文字またはネットワーク共有を追加する必要があります。 ネットワーク共有もサポートされています。

シンボル パス内の各ディレクトリについて、デバッガーは 3 つのディレクトリを検索します。 たとえば、シンボル パスに C:\Dir1 が含まれており、デバッガーが DLL のシンボル情報を探している場合、デバッガーは次のディレクトリ内のシンボル情報を順に検索します。

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

その後、デバッガーはシンボル パス内の各ディレクトリに対してこのプロセスを繰り返します。 最後に、デバッガーは現在のディレクトリを調べ、その後 ..\dll が付加された現在のディレクトリも調べます。 デバッガーは、デバッグするバイナリに応じて、..\dll..\exe、または ..\sysを追加します。

シンボル ファイルには、日付と時刻のスタンプがあります。 デバッガーは常に、デバッグ中のバイナリ ファイルのタイム スタンプと一致するシンボルを探します。 デバッガーがこの順序で最初に見つけた間違ったシンボルを使用することについて心配する必要はありません。 シンボル ファイルを使用できない場合の応答の詳細については、「シンボル名の一致を参照してください。

シンボル パスを設定する 1 つの方法は、.sympath コマンドを入力することです。 シンボル パスを設定するその他の方法については、「このトピックの後半で シンボル パスを制御する」を参照してください。

シンボルをローカルにキャッシュする

シンボルはローカルにキャッシュする必要があります。 シンボルをローカルにキャッシュする方法の 1 つは、シンボル パスに cache*; または cache*localsymbolcache;* を含める方法です。

シンボル パスに文字列 cache*; を含める場合、この文字列の右側に表示される要素から読み込まれたシンボルは、ローカル コンピューターの既定のシンボル キャッシュ ディレクトリに格納されます。 たとえば、次のコマンドは、\\someshare という名前のネットワーク共有からシンボルを取得し、ローカル コンピューター上の既定の場所にシンボルをキャッシュするようにデバッガーに指示します。

.sympath cache*;\\someshare

シンボル パスに文字列 cache*localsymbolcache; を含める場合、この文字列の右側に表示される要素から読み込まれたシンボルは、localsymbolcache ディレクトリに格納されます。

たとえば、次のコマンドは、ネットワーク共有 \\someshare からシンボルを取得し、c:\MySymbols ディレクトリにシンボルをキャッシュするようにデバッガーに指示します。

.sympath cache*C:\MySymbols;\\someshare

シンボル サーバーの使用: srv*

インターネットまたは企業ネットワークに接続している場合、シンボルにアクセスする最も効率的な方法は、パブリック Microsoft パブリック シンボル サーバーなどのシンボル サーバーを使用することです。 シンボル サーバーは、シンボル パスで次のいずれかの文字列を使用して使用できます。

  • srv* 文字列

    シンボル パスに文字列 srv* を含める場合、デバッガーはシンボル サーバーを使用して既定のシンボル ストアからシンボルを取得します。 たとえば、次のコマンドは、既定のシンボル ストアからシンボルを取得するようにデバッガーに指示します。 これらのシンボルは、ローカル コンピューターにはキャッシュされません。

    .sympath srv*
    
  • srv*symbolstore 文字列

    シンボル パスに文字列 srv*symbolstore を含めると、デバッガーはシンボル サーバーを使用して シンボル ストアからシンボルを取得します。 たとえば、次のコマンドは、microsoft シンボル サーバー ストアからシンボル 取得するようにデバッガーに指示します。 これらのシンボルは、ローカル コンピューターにはキャッシュされません。

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • srv*localsymbolcache*symbolstore 文字列

    シンボル パスに文字列 srv*localcache*symbolstore を含めると、デバッガーはシンボル サーバーを使用して シンボル ストア からシンボルを取得し、localcache ディレクトリにキャッシュします。 たとえば、次のコマンドは、Microsoft シンボル サーバーからシンボルを取得し、シンボルをhttps://msdl.microsoft.com/download/symbols し、c:\MyServerSymbolsにキャッシュするようにデバッガーに指示します。

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

コンピューター上に手動でシンボルを配置するディレクトリがある場合は、そのディレクトリをシンボル サーバーから取得したシンボルのキャッシュとして使用しないでください。 代わりに、2 つの個別のディレクトリを使用します。 たとえば、c:\MyRegularSymbols にシンボルを手動で配置し、サーバーから取得したシンボルのキャッシュとして c:\MyServerSymbols を指定できます。 次の例は、シンボル パスで両方のディレクトリを指定する方法を示しています。

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

シンボル サーバーとシンボル ストアの詳細については、「カスタム シンボル ストアとシンボル サーバーの」を参照してください。

キャッシュ* と srv* を組み合わせる

シンボル パスに文字列 cache*; を含める場合、この文字列の右側に表示される要素から読み込まれたシンボルは、ローカル コンピューターの既定のシンボル キャッシュ ディレクトリに格納されます。 たとえば、次のコマンドは、Microsoft シンボル サーバー からシンボルを取得し、既定のシンボル キャッシュ ディレクトリに保存してキャッシュ するようデバッガーに指示します。

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

シンボル パスに文字列 cache*localsymbolcache; を含める場合、この文字列の右側に表示される要素から読み込まれたシンボルは、localsymbolcache ディレクトリに格納されます。

たとえば、次のコマンドは、Microsoft シンボル サーバーからシンボルを取得し、それを ストアでキャッシュし、c:\MySymbols ディレクトリに保存するようにデバッガーに指示します。

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

AgeStore を使用してキャッシュ サイズを小さくする

AgeStore ツールを使用して、指定した日付より古いキャッシュされたファイルを削除したり、結果として得られるキャッシュ サイズが指定した量より小さいように十分な古いファイルを削除したりできます。 このキャッシュ ファイルのクリーンアップは、ダウンストリーム ストアが大きすぎる場合に便利です。

シンボルの遅延読み込み

デバッガーの既定の動作では、遅延シンボル読み込み遅延シンボル読み込みとも呼ばれます)を使用します。 この種の読み込みとは、シンボルが必要になるまで読み込まれないことを意味します。

たとえば、.sympath コマンドを使用してシンボル パスを変更すると、エクスポート シンボルを含むすべての読み込まれたモジュールが遅延して再読み込みされます。

完全な PDB シンボル を持つモジュールのシンボルは、新しいパスに元の PDB シンボルの読み込みパスが含まれなくなると、遅延的に再読み込みされます。 新しいパスに PDB シンボル ファイルへの元のパスが含まれている場合、それらのシンボルは遅延して再読み込みされません。

-s コマンドライン オプションを使用して、CDB と KD での遅延シンボルの読み込みをオフにすることができます。 ld シンボルを読み込む コマンドを使用するか、 オプションと共に .reload モジュールコマンドを使用して、シンボルの読み込みを強制することもできます。

Azure DevOps Services の成果物

シンボル サーバーは、Azure DevOps ServicesAzure Artifacts で使用できます。 WinDbg で Azure Artifacts を使用する方法については、「WinDbg (Azure Artifacts)のシンボルを使用したデバッグ を参照してください。 Azure で生成されるシンボルの一般的な情報については、「シンボルの概要 (Azure Artifacts)」を参照してください。

シンボル パスを制御する

シンボル パスを制御するには、次のいずれかの方法を選択します。

  • .symfix set symbol store path コマンド を使用して、多くの状況で適切に動作するパブリック Microsoft シンボル サーバーへの既定のパスを設定します。 ローカル キャッシュを設定するには、「.symfix C:\MyCache」と入力します。

  • パスを表示、設定、変更、または追加するには、.sympath コマンド を使用します。

  • デバッガーを開始する前に、_NT_SYMBOL_PATH_NT_ALT_SYMBOL_PATH環境変数 を使用してパスを設定します。 シンボルパスは、_NT_ALT_SYMBOL_PATHの後に _NT_SYMBOL_PATH を追加することによって作成されます。 通常、パスは _NT_SYMBOL_PATHを介して設定されます。 ただし、_NT_ALT_SYMBOL_PATH を使用して、共有シンボル ファイルのプライベート バージョンがある場合など、特別な場合にこれらの設定をオーバーライドすることができます。 これらの環境変数を使用して無効なディレクトリを追加しようとすると、デバッガーはこのディレクトリを無視します。

  • デバッガーを起動するときに、-y コマンド ライン オプション を使用してパスを設定します。

  • WinDbg でのみ、ファイルを使用できます。[シンボル ファイル パス] コマンドを するか、CTRL+S を押して、パスの表示、設定、変更、追加を行います。

-sins コマンド ライン オプションを使用すると、デバッガーはシンボル パス環境変数を無視します。

トラブルシューティング

!sym noisy または -nWinDbg コマンド ライン オプションを使用して、シンボルが読み込まれたときに追加の詳細を表示します。 その他のトラブルシューティング方法については、「シンボルの検証 を参照してください。

関連項目

シンボル

高度な SymSrv の使用

.sympath コマンド

.symfix