シンボル パスは、WinDbg、KD、CDB、NTST などの Windows デバッガーがシンボル ファイルを検索する場所を指定します。
クイック スタート:.symfix コマンドを使用して、Microsoft のパブリック シンボル サーバーへの既定のパスを設定します。これは、ほとんどのデバッグ シナリオで適切に機能します。
効率的なデバッグを有効にするためにシンボル パスを正しく構成します。デバッガーは、コードの実行を分析するために必要なシンボル ファイルを自動的に見つけて読み込むことができます。 このガイドでは、シンボル パスの設定、Microsoft のシンボル サーバーの使用、ローカルでのシンボルのキャッシュ、一般的な問題のトラブルシューティングを行う方法について説明します。 シンボルとシンボル ファイルの詳細については、シンボルを参照してください。
Microsoft Visual Studio を含む一部のコンパイラは、バイナリ ファイルと同じディレクトリにシンボル ファイルを配置します。 シンボル ファイルとチェックされたバイナリ ファイルには、パスとファイル名の情報が含まれています。これにより、デバッガーはシンボル ファイルを自動的に検索できます。 実行可能ファイルをビルドしたコンピューターでユーザー モード プロセスをデバッグし、シンボル ファイルが元の場所にある場合、デバッガーはシンボル パスを設定せずにシンボル ファイルを見つけることができます。
その他のほとんどの状況では、シンボル ファイルの場所を指すようにシンボル パスを設定する必要があります。
ヒント
.symfix
シンボル パスの構文
デバッガーのシンボル パスは、セミコロンで区切られた複数のディレクトリ パスで構成される文字列です。 たとえば、C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirBします。
相対パスがサポートされています。 ただし、常に同じディレクトリからデバッガーを起動しない限り、各パスの前にドライブ文字またはネットワーク共有を追加する必要があります。 ネットワーク共有もサポートされています。
シンボル パス内の各ディレクトリについて、デバッガーは 3 つのディレクトリを検索します。 たとえば、シンボル パスに C:\Dir1 が含まれており、デバッガーが DLL のシンボル情報を探している場合、デバッガーは次の順序で検索します。
C:\Dir1\symbols\dllC:\Dir1\dllC:\Dir1
デバッガーは、シンボル パス内の各ディレクトリに対してこのプロセスを繰り返します。
最終的なフォールバックの場所:
- 現在のディレクトリ
-
..\dll、..\exe、または..\sysが追加された現在のディレクトリ (デバッグ対象のバイナリの種類によって異なります)
シンボル ファイルには、日付と時刻のスタンプがあります。 デバッガーは常に、デバッグ中のバイナリ ファイルのタイム スタンプと一致するシンボルを探します。 デバッガーがこの順序で最初に見つけた間違ったシンボルを使用することについて心配する必要はありません。 シンボル ファイルが使用できない場合の応答の詳細については、「 シンボル名の照合」を参照してください。
シンボル パスを設定する 1 つの方法は、.sympath コマンドを入力することです。 シンボル パスを設定するその他の方法については、「このトピックの後半で シンボル パスを制御する」を参照してください。
シンボル パスを制御する
シンボル パスを制御するには、次のいずれかの方法を選択します。
.symfix set symbol store path コマンド を使用して、多くの状況で適切に動作するパブリック Microsoft シンボル サーバーへの既定のパスを設定します。 ローカル キャッシュを設定するには、「
.symfix C:\MyCache」と入力します。.sympath コマンドを使用して、パスの表示、設定、変更、または追加を行います。
デバッガーを開始する前に、
_NT_SYMBOL_PATHと_NT_ALT_SYMBOL_PATH環境変数 を使用してパスを設定します。 シンボルパスは、_NT_SYMBOL_PATHの後に_NT_ALT_SYMBOL_PATHを追加することによって作成されます。 通常は、_NT_SYMBOL_PATHのパスを設定します。 ただし、_NT_ALT_SYMBOL_PATHを使用して、共有シンボル ファイルのプライベート バージョンがある場合など、特別な場合にこれらの設定をオーバーライドすることができます。 これらの環境変数を使用して無効なディレクトリを追加しようとすると、デバッガーはこのディレクトリを無視します。デバッガーを起動するときに、-y コマンド ライン オプション を使用してパスを設定します。
WinDbg でのみ、 ファイル |[シンボル ファイル パス] コマンド を使用するか、
CTRL+Sキーを押して、パスの表示、設定、変更、追加を行います。
-sins コマンド ライン オプションを使用すると、デバッガーはシンボル パス環境変数を無視します。
シンボルをローカルにキャッシュする
デバッガーのパフォーマンスを向上させ、ネットワーク トラフィックを減らすために、シンボルをローカルにキャッシュすることをお勧めします。 シンボルをキャッシュするには、シンボル パスに 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/symbolssrv*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 での遅延シンボルの読み込みをオフにすることができます。
Azure DevOps Services の成果物
シンボル サーバーは、Azure DevOps Services
トラブルシューティング
!sym noisy または -nWinDbg コマンド ライン オプションを使用して、シンボルが読み込まれたときに追加の詳細を表示します。 その他のトラブルシューティング方法については、「シンボルの検証
次のステップ
シンボル パスを構成したので、シンボルが正しく読み込まれるかどうかを確認し、一般的な問題のトラブルシューティングを行う方法について説明します。
関連するタスク:
コマンド リファレンス: