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 シンボル サーバー ストアからシンボルを取得し、 にシンボルをキャッシュするようにデバッガーに 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 load symbols コマンドを使用するか、オプションと/f共に .reload モジュール コマンドを使用して、シンボルの読み込みを強制することもできます。

Azure DevOps Services の成果物

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

シンボル パスを制御する

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

  • .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 Command-Line オプション を使用します。 その他のトラブルシューティング方法については、「 シンボルの検証」を参照してください。

関連項目

高度な SymSrv の使用