次の方法で共有


Visual Studio デバッガーでシンボル (.pdb) ファイルとソース ファイルを指定する (C#、C++、Visual Basic、F#)

プログラム データベース (.pdb) ファイルは、シンボル ファイルとも呼ばれ、プロジェクトのソース コード内の識別子とステートメントを、コンパイル済みアプリの対応する識別子と命令にマップします。 これらのマッピング ファイルは、デバッガーをソース コードにリンクし、デバッグを有効にします。

Visual Studio IDE から標準のデバッグ ビルド構成でプロジェクトをビルドすると、コンパイラによって適切なシンボル ファイルが作成されます。 この記事では、IDE でシンボル ファイルを管理する方法について説明します。次に例を示します。

シンボル ファイルの詳細については、次を参照してください。

シンボル ファイルのしくみ

.pdb ファイルには、アプリのデバッグ構成の増分リンクを可能にするデバッグとプロジェクトの状態情報が保持されます。 Visual Studio デバッガーでは 、.pdb ファイルを使用して、デバッグ中に次の 2 つの重要な情報が決定されます。

  • Visual Studio IDE に表示するソース ファイル名と行番号。
  • ブレークポイントとして停止するアプリ内の場所。

シンボル ファイルには、ソース ファイルの場所と、必要に応じて取得元のサーバーも表示されます。

デバッガーは、アプリのビルド時に作成された .pdb ファイル (つまり、元の .pdb ファイルまたはコピー) と完全に一致する .pdb ファイルのみを読み込みます。 コード自体が変更されていない場合でもアプリのレイアウトが変更される可能性があるため、この正確な重複が必要です。 詳細については、「Visual Studio でビルドされたバイナリ ファイルと完全に一致するようにデバッガー シンボル ファイルが必要な理由」を参照してください。

ヒント

プロジェクトのソース コード (Windows コードやプロジェクトが呼び出すサード パーティ製コードなど) の外部でコードをデバッグするには、外部コードの .pdb ファイル (および必要に応じてソース ファイル) の場所を指定する必要があります。これは、アプリ内のビルドと完全に一致する必要があります。

デバッガーがシンボルを検索する場所

Visual Studio IDE でプロジェクトをデバッグすると、デバッガーは既定で見つけることができるシンボル ファイルを自動的に読み込みます。

リモート デバイスでマネージド コードをデバッグする場合、すべてのシンボル ファイルはローカル コンピューターまたは デバッガー オプションで指定された場所に配置する必要があります。

デバッガーは、次の場所にあるシンボル ファイルを検索します。

  1. プロジェクト フォルダー。

  2. DLL または実行可能ファイル (.exe) ファイル内で指定されている場所。

    既定では、コンピューター上に DLL または .exe ファイルをビルドした場合、リンカーは、関連付けられている .pdb ファイルの完全なパスとファイル名を DLL または .exeファイルに 配置します。 デバッガーは、シンボル ファイルがその場所に存在するかどうかを確認します。

  3. DLL または .exe ファイルと同じフォルダー。

  4. シンボル ファイルのデバッガー オプションで指定された場所。 シンボルの場所を追加して有効にするには、「 シンボルの場所と読み込みオプションを構成する」を参照してください。

    • 任意のローカル シンボル キャッシュ フォルダー。

    • 指定されたネットワーク、インターネット、またはローカル シンボル サーバーと場所 (選択されている場合は Microsoft シンボル サーバーなど)。 Visual Studio では、 symsrv プロトコルを実装するシンボル サーバーからデバッグ シンボル ファイルをダウンロードできます。 Visual Studio Team Foundation ServerDebugging Tools for Windows は、シンボル サーバーを使用できる 2 つのツールです。

      使用できるシンボル サーバーは次のとおりです。

      パブリック Microsoft シンボル サーバー: システム DLL またはサードパーティ ライブラリの呼び出し中に発生するクラッシュをデバッグするには、多くの場合、システム .pdb ファイルが必要です。 システム .pdb ファイルには、Windows DLL、 .exe ファイル、およびデバイス ドライバーのシンボルが含まれています。 Windows オペレーティング システム、MDAC、IIS、ISA、および .NET のシンボルは、パブリック Microsoft シンボル サーバーから取得できます。

      内部ネットワーク上またはローカル コンピューター上のシンボル サーバー: チームまたは会社は、独自の製品のシンボル サーバーを作成し、外部ソースからのシンボルのキャッシュとして作成できます。 独自のコンピューターにシンボル サーバーがある場合があります。

      サード パーティのシンボル サーバー: Windows アプリケーションとライブラリのサード パーティプロバイダーは、インターネット上のシンボル サーバーへのアクセスを提供できます。

警告

パブリック Microsoft シンボル サーバー以外のシンボル サーバーを使用する場合は、シンボル サーバーとそのパスが信頼できることを確認します。 シンボル ファイルには任意の実行可能コードを含めることができるため、セキュリティ上の脅威にさらされる可能性があります。

シンボル ファイルの場所と読み込みオプションを構成する

デバッガーは、既定でシンボルのさまざまな場所をチェックします。 デバッガーがシンボルを検索する場所を参照してください。

[ツール>オプション>Debugging>Symbols] ページでは、次のことができます。

  • シンボル ファイルの検索パスを指定して選択します。
  • Microsoft、Windows、またはサード パーティのコンポーネントのシンボル サーバーを指定します。
  • デバッガーでシンボルを自動的に読み込むか、または自動的に読み込まないモジュールを指定します。
  • アクティブなデバッグ中にこれらの設定を変更します。 デバッグ中のシンボルの読み込みを参照してください。

シンボルの場所と読み込みオプションを指定するには:

これらのオプションは、Visual Studio 2022 バージョン 17.12 Preview 1 で更新されました。

  1. Visual Studio で、 Tools>Options>Debugging>Symbols (または Debug>Options>Symbols) を開きます。

  2. [シンボル ファイル (.pdb) の場所] で、

    • Microsoft シンボル サーバーまたはシンボル サーバー NuGet.org 使用するには、チェック ボックスをオンにします。

    • 新しいシンボル サーバーの場所を追加するには、

      1. ツール バーの + 記号を選択します。
      2. テキスト フィールドに、シンボル サーバーまたはシンボルの場所の URL (http)、ネットワーク共有、またはローカル パスを入力します。 文の補完機能は、正しいフォーマットを見つけるのに役立ちます。

    ツール - オプション - デバッグ - シンボル ページ

    ツール - オプション - デバッグ - シンボル ページ

    指定したフォルダーのみが検索されます。 検索するサブフォルダーのエントリを追加する必要があります。

    • 新しい Azure DevOps シンボル サーバーの場所を追加するには:

      1. ツール バーの [ツール]、[オプション]、[デバッグ]、[シンボル] の新しいサーバー アイコン を選択します。

      2. [ Azure DevOps シンボル サーバーへの接続 ] ダイアログで、使用可能なシンボル サーバーのいずれかを選択し、[ 接続] を選択します。

        詳細については、「 Azure Artifacts シンボル サーバーの追加」を参照してください。

    • シンボルの場所の読み込み順序を変更するには、Ctrl+Up および Ctrl+Down、または上下の矢印アイコンを使用します

    • URL またはパスを編集するには、エントリをダブルクリックするか、エントリを選択して F2 キーを押します。

    • エントリを削除するには、エントリを選択し、 - アイコンを選択します。

  3. (省略可能)シンボルの読み込みパフォーマンスを向上させるには、 このディレクトリの [シンボルのキャッシュ] に、シンボル サーバーがシンボルをコピーできるローカル フォルダー パスを入力します。

C:\Windows やサブフォルダーなどの保護されたフォルダーにローカル シンボル キャッシュを配置しないでください。 代わりに読み取り/書き込みフォルダーを使用してください。

_NT_SYMBOL_PATH環境変数が設定されている場合は、このディレクトリのキャッシュ シンボルで設定された値がオーバーライドされます。

  1. デバッガーの起動時に シンボル ファイル (.pdb) の場所 から読み込むモジュールを指定します。

    • 自動的に検索するモジュール シンボルを選択する (推奨) を選択すると、Visual Studio が検索して読み込むシンボルを決定します。 既定では、Visual Studio は、開いているソリューションによってビルドされたシンボルを自動的に読み込み、一般的なデバッグ操作を実行するために必要な追加のシンボルを読み込みます。 これにより、Visual Studio で検索して読み込む必要があるファイルの数が減り、デバッガーのパフォーマンスが向上します。 [ モジュール フィルターの指定 ] リンクをクリックして、追加のシンボルを強制的に読み込むことができます。

    • [ 除外しない限り、すべてのモジュール シンボルを検索 する] を選択すると、デバッグ プロセス内のすべてのシンボルが Visual Studio に強制的に読み込まれます。 デバッグ エクスペリエンスが遅くなる可能性があるため、これはお勧めしません。 このオプションを選択した場合は、[ モジュール フィルターの指定 ] リンクをクリックして、Visual Studio で特定のシンボルを無視させることができます。

    • 明示的に除外するモジュールを除き、シンボル ファイルの場所にあるすべてのモジュールのすべてのシンボルを読み込むには、 除外しない限り、[すべての モジュールを読み込む] を選択します (既定値)。 特定のモジュールを除外するには、[ 除外するモジュールの指定] を選択し、 + アイコンを選択し、除外するモジュールの名前を入力して、[ OK] を選択します

    • シンボル ファイルの場所から指定したモジュールのみを読み込むには、[ 指定したモジュールのみを読み込む] を選択します。 [ 含まれるモジュールの指定] を選択し、 + アイコンを選択し、含めるモジュールの名前を入力して、[ OK] を選択します。 他のモジュールのシンボル ファイルは読み込まれません。

  2. [OK] を選択.

モジュール フィルターを指定する

[ 検索するモジュール シンボルを自動的に選択する ] と [ 除外されたオプションを除くすべてのモジュール シンボルを検索 する] の両方で、デバッグ中に検索されるシンボルをより細かく制御できます。 [ モジュール フィルターの指定] を選択して、エクスペリエンスを微調整します。

既定では、 検索するモジュール シンボルを自動的に選択 すると、次のダイアログが表示されます。

モジュール フィルターの指定のスクリーンショット。

'+' アイコンを使用して、フィルターにモジュールを追加できます。 モジュール フィルターは、単純なワイルドカード マッチングをサポートします。 '*' は任意の文字グループと一致します。 たとえば、'*myproduct*' は、'myproduct.utilities.dll' や 'entrypoint.myproduct.exe' などのファイルと一致します。

エクスペリエンスをさらにカスタマイズするには、いくつかの追加オプションがあります。

  • モジュールの横にあるシンボルを常に読み込む には、対応する .dll または .exe ファイルの横にあるファイル システムに格納されている pdb ファイルを読み込むよう Visual Studio に指示します。 これは、デプロイされた Web アプリのデバッグを試みる場合などに役立ちます。

  • 必要に応じて追加のシンボルを自動的に読み込むと 、ステップ実行するモジュールがプロジェクトまたはモジュール フィルターに含まれていない場合でも、ステップ実行などの一般的なデバッグ アクションを実行するシンボルを検索するように Visual Studio に指示されます。 検索の決定方法は、[ マイ コードのみ ] 設定の影響を受ける可能性があります。

[ 除外しない限り、すべてのモジュール シンボルを検索する] を選択した場合、モジュール フィルター ダイアログは次のようになります。

除外されたモジュールを指定するスクリーンショット。

このダイアログでは、Visual Studio でシンボルを読み込 まない モジュールを選択できます。 このシナリオでは、Visual Studio は、一致するフィルターを追加して除外しない限り、デバッグ されたプロセス内のすべてのモジュール (サード パーティによるモジュールを含む) のシンボルの読み込みを試みます。 この動作を変更する唯一の方法は、[ マイ コードのみ ] の設定です。

デバッグ用のその他のシンボル オプション

Tools>Options>Debugging>General (または Debug>Options>General) で追加のシンボル オプションを選択できます。

  • dll エクスポートの読み込み (ネイティブのみ)

    C/C++ 用の DLL エクスポート テーブルを読み込みます。 詳細については、 DLL エクスポート テーブルを参照してください。 DLL エクスポート情報の読み取りにはオーバーヘッドが伴うので、エクスポート テーブルの読み込みは既定でオフになっています。 C/C++ ビルド コマンド ラインで dumpbin /exports を使用することもできます。

  • アドレス レベルのデバッグを有効にし、ソースが使用できない場合は逆アセンブリを表示する

    ソース ファイルまたはシンボル ファイルが見つからない場合は、常に逆アセンブリを表示します。

    オプション / デバッグ / 一般的な逆アセンブリ オプション

  • ソース サーバーのサポートを有効にする

    ソース サーバーを使用して、ローカル コンピューターにソース コードがない場合、または .pdb ファイルがソース コードと一致しない場合に、アプリのデバッグに役立ちます。 ソース サーバーは、ファイルの要求を受け取り、ソース管理から実際のファイルを返します。 ソース サーバーは、 srcsrv.dll という名前の DLL を使用してアプリの .pdb ファイルを読み取ることによって実行されます。 .pdb ファイルには、ソース コード リポジトリへのポインターと、リポジトリからソース コードを取得するために使用されるコマンドが含まれています。

    アプリの .pdb ファイルから実行できる srcsrv.dll コマンドを制限するには、許可されているコマンドをsrcsrv.iniという名前のファイルに一覧表示します。 srcsrv.ini ファイルを srcsrv.dllおよびdevenv.exe と同じフォルダーに配置します

    重要

    任意のコマンドをアプリの .pdb ファイルに埋め込むことができるので、実行するコマンドのみを srcsrv.ini ファイルに配置してください。 srcsvr.ini ファイルにないコマンドを実行しようとすると、確認ダイアログ ボックスが表示されます。 詳細については、「 セキュリティ警告: デバッガーは信頼されていないコマンドを実行する必要があります」を参照してください。

    コマンド パラメーターに対して検証は実行されないため、信頼できるコマンドには注意してください。 たとえば、srcsrv.inicmd.exe をリストした場合、悪意のあるユーザーが cmd.exe に危険をもたらす可能性のあるパラメーターを指定するかもしれません。

    この項目と必要な子項目を選択します。 部分信頼アセンブリのソース サーバーを許可する (管理のみ) し、 常に信頼されていないソース サーバー コマンドをプロンプトなしで実行 すると、セキュリティリスクが高まる可能性があります。

    ソース サーバー オプションDBG_Options_General_EnableSrcSrvr_checkboxを有効にする

コンパイラ シンボル オプション

Visual Studio IDE から標準の デバッグ ビルド構成を使用してプロジェクトをビルドすると、C++ とマネージド コンパイラによってコードに適したシンボル ファイルが作成されます。 コードでコンパイラ オプションを設定することもできます。

Visual Studio でビルド構成のコンパイラ オプションを設定するには、「 デバッグ構成とリリース構成を設定する」を参照してください。

.NET オプション

/debug を使用してビルドし、.pdb ファイルを作成します。 /debug:full または /debug:pdbonly を使用してアプリケーションをビルドできます。 /debug:full を使用してビルドすると、デバッグ可能なコードが生成されます。 /debug:pdbonly を使用してビルドすると .pdb ファイルが生成されますが、デバッグ情報が使用可能であることを JIT コンパイラに通知するDebuggableAttributeは生成されません。 デバッグできないリリース ビルド用の .pdb ファイルを生成する場合は、/debug:pdbonly を使用します。 詳細については、 /debug (C# コンパイラ オプション) または /debug (Visual Basic) を参照してください。

C/C++ オプション

  • VC<x>.pdb ファイルと <project>.pdb ファイル

    /ZI または /Zi を使用してビルドすると、C/C++ 用の .pdb ファイルが作成されます。 Visual C++ では、コンパイラが作成する .pdb ファイルに /Fd オプションの名前を付けます。 IDE を使用して Visual Studio でプロジェクトを作成すると、/Fd オプションが設定され、> という名前の .pdb ファイルが作成されます。

    メイクファイルを使用して C/C++ アプリケーションをビルドし、/Fd を使用せずに /ZI または /Zi を指定してファイル名を指定すると、コンパイラによって 2 つの .pdb ファイルが作成されます。

    • VC<x>.pdbここで、<x> は、Vc11.pdb などの Microsoft C++ コンパイラのバージョンを表します

      VC<x>.pdb ファイルは、個々のオブジェクト ファイルのすべてのデバッグ情報を格納し、プロジェクトメイクファイルと同じディレクトリに存在します。 C/C++ コンパイラは、オブジェクト ファイルを作成するたびに、デバッグ情報を VC<x>.pdb にマージします。 したがって、すべてのソース ファイルに <windows.h> などの共通ヘッダー ファイルが含まれている場合でも、それらのヘッダーの typedef は、すべてのオブジェクト ファイルではなく 1 回だけ格納されます。 挿入された情報には型情報が含まれますが、関数定義などのシンボル情報は含まれません。

    • <project>.pdb (英語)

      <project>.pdb ファイルは、プロジェクトの .exe ファイルのすべてのデバッグ情報を格納し、\debug サブディレクトリに存在します。 <project>.pdb ファイルには、VC<x>.pdb で見つかった型情報だけでなく、関数プロトタイプを含む完全なデバッグ情報が含まれています。

    VC<x>.pdb ファイルと <project>.pdb ファイルの両方で増分更新が可能です。 リンカーは、 .pdb ファイルへのパスも、作成する .exe または .dll ファイルに埋め込みます。

  • DLL エクスポート テーブル

    dumpbin /exportsを使用して、DLL のエクスポート テーブルで使用できるシンボルを確認します。 DLL エクスポート テーブルからのシンボリック情報は、Windows メッセージ、Windows プロシージャ (WindowProcs)、COM オブジェクト、マーシャリング、またはシンボルのない DLL を操作する場合に役立ちます。 シンボルは、任意の 32 ビット システム DLL で使用できます。 呼び出しは呼び出し元の順序で一覧表示され、現在の関数 (最も深く入れ子になっている関数) が先頭に表示されます。

    dumpbin /exports出力を読み取ることで、英数字以外の文字を含む正確な関数名を確認できます。 関数名を正確に表示することは、関数にブレークポイントを設定する場合に便利です。関数名はデバッガー内の別の場所で切り捨てられる可能性があるためです。 詳細については、dumpbin /exportsを参照してください。

Web アプリケーション

ASP.NET アプリケーションの web.config ファイルをデバッグ モードに設定します。 デバッグ モードでは、ASP.NET は動的に生成されたファイルのシンボルを生成し、デバッガーが ASP.NET アプリケーションにアタッチできるようにします。 Web プロジェクト テンプレートからプロジェクトを作成した場合、デバッグを開始すると、Visual Studio によって自動的に設定されます。

デバッグ中にシンボルを読み込む

モジュール呼び出し履歴ローカル自動、または任意のウォッチ ウィンドウを使用して、デバッグ中にシンボルを読み込んだり、シンボル オプションを変更したりできます。 詳細については、「デバッガーをアプリにアタッチする方法について理解を深める」を参照してください。

[モジュール] ウィンドウでシンボルを操作する

デバッグ中、[ モジュール ] ウィンドウには、デバッガーがユーザー コードまたはマイ コードとして扱っているコード モジュールと、そのシンボルの読み込み状態が表示されます。 また、[モジュール] ウィンドウでシンボルの読み込み状態の監視、シンボルの読み込み、シンボル オプション の変更を 行うこともできます。

デバッグ中にシンボルの場所またはオプションを監視または変更するには:

  1. [モジュール] ウィンドウを開くには、デバッグ中に [デバッグ>Windows>Modules] を選択します (または Ctrl + Alt + U キーを押します)。
  2. [ モジュール ] ウィンドウで、[ シンボルの状態] ヘッダーまたは [ シンボル ファイル ] ヘッダー、または任意のモジュールを右クリックします。
  3. コンテキスト メニューで、次のいずれかを選択します。
選択肢 説明
シンボルの読み込み スキップされた、見つからない、またはシンボルが読み込まれていないモジュールに表示されます。 オプション>Debugging>Symbols ページで指定された場所からシンボルを読み込もうとします。 シンボル ファイルが見つからないか、読み込まれていない場合は、 エクスプローラー を起動して、検索する新しい場所を指定できます。
シンボルの読み込み情報 読み込まれたシンボル ファイルの場所、またはデバッガーがファイルを見つけられない場合に検索された場所を示します。
シンボル設定 [オプション>設定>シンボルの場所を編集および追加できる [Symbols] ページを開きます。
常に自動的に読み込む 選択したシンボル ファイルを、デバッガーによって自動的に読み込まれるファイルの一覧に追加します。
ソースからシンボル ファイルへの逆コンパイル .NET コードの場合は、このオプションを選択し、「アセンブリの ソースの生成と埋め込み」の手順に従うことができます。

[シンボルが読み込まれていない/ソースが読み込まれていない] ページを使用する

シンボル ファイルまたはソース ファイルを使用できないコードをデバッガーで中断するには、いくつかの方法があります。

  • コードにステップ インします。
  • ブレークポイントまたは例外でコードを中断します。
  • 別のスレッドに切り替えます。
  • [コールスタック] ウィンドウでフレームをダブルクリックして、スタックフレームを変更します。

この場合、デバッガーは必要なシンボルまたはソースを見つけて読み込むのに役立つ [ シンボル読み込まれていません] または [ソースが読み込まれていない ] ページを表示します。

[シンボルが読み込まれていません] ページ

「シンボルが読み込まれていません」のドキュメント ページを使用して、見つからないシンボルを検索して読み込むには:

  • 検索パスを変更するには、選択されていないパスを選択するか、[ 新しいパス ] または [ 新しい VSTS パス ] を選択し、新しいパスを入力または選択します。 [ 読み込み] を選択してパスをもう一度検索し、シンボル ファイルが見つかった場合は読み込みます。
  • シンボル オプションをオーバーライドして検索パスを再び試すには、[<executable-name> を参照して探す] を選びます。 シンボル ファイルが見つかった場合は読み込まれます。または、シンボル ファイルを手動で選択できるように エクスプローラー が開きます。
  • シンボル設定ページを開いて動作を設定するには、[シンボル設定の変更] を選択します (または、[>デバッグ>シンボル) を選択します。
  • (詳細)逆アセンブリを新しいウィンドウに 1 回表示するには、[ 逆アセンブリの表示] を選択するか、[ オプション] ダイアログを 選択して、ソース ファイルまたはシンボル ファイルが見つからない場合に常に逆アセンブリを表示するオプションを設定します。 詳細については、「 逆アセンブリ コードの表示」を参照してください。
  • 検索された場所と結果を表示するには、[ シンボルの読み込み情報] を展開します。
  • C# コードの場合は、[シンボルの読み込みなし] ページまたは [ソースの読み込みなし] ページからソース コードを逆コンパイルすることもできます。

いずれかのオプションを実行した後に デバッガーで .pdb ファイルが検出され、 .pdb ファイル内の情報を使用してソース ファイルを取得できる場合は、ソースが表示されます。 それ以外の場合は、問題を説明する [ ソースが読み込まれていません] ページが表示され、問題を解決できるアクションへのリンクが表示されます。

ソース ファイルの検索パスをソリューションに追加するには:

デバッガーがソース ファイルを検索する場所を指定したり、特定のファイルを検索から除外したりできます。

  1. ソリューション エクスプローラーでソリューションを選択し、[プロパティ] アイコンを選択するか、Alt キー+Enter キーを押すか、右クリックして [プロパティ] を選択します。

  2. [ ソース ファイルのデバッグ] を選択します。

    [デバッグ ソース ファイル] ページ

  3. [ ソース コードを含むディレクトリ] で、検索するソース コードの場所を入力または選択します。 [新しい行] アイコンを使用して場所を追加するか、上下の矢印アイコンを使用して並べ替えるか、X アイコンを使用して削除します。

    デバッガーは、指定されたディレクトリのみを検索します。 検索するサブディレクトリのエントリを追加する必要があります。

  4. [ これらのソース ファイルを検索しない] で、検索から除外するソース ファイルの名前を入力します。

  5. [ OK] または [ 適用] を選択します。