次の方法で共有


シンボル

シンボルは、デバッグやその他の診断ツールに役立ちます。 シンボル ファイルの内容は、言語、コンパイラ、プラットフォームによって異なります。 大まかに言えば、シンボルはソース コードとコンパイラによって生成されるバイナリとの間のマッピングです。 これらのマッピングは、 ソース 行番号情報またはローカル変数名を解決するために 、Visual Studio や Visual Studio Code などのツールで使用されます。

シンボルに関する Windows のドキュメントには、Windows のシンボルに関するより詳細な情報が含まれていますが、概念の多くは他のプラットフォームにも適用されます。

詳細については、以下をご覧ください。NET のポータブル PDB 形式

.NET Core では、新しいシンボル ファイル (PDB) 形式 (ポータブル PDB) が導入されました。 Windows 専用の従来の PDB とは異なり、ポータブル PDB はすべてのプラットフォームで作成および読み取ることができます。

PDB とは

PDB ファイルは、他のツール、特にデバッガー、メイン実行可能ファイルの内容と生成方法に関する情報を提供するためにコンパイラによって生成される補助ファイルです。 たとえば、デバッガーは PDB を読み取り、foo.cs行 12 を適切な実行可能な場所にマップして、ブレークポイントを設定できるようにします。 Windows PDB 形式は長い時間の経過と同時に、さらに古い他のネイティブ デバッグ シンボル形式から進化しました。 ネイティブ (C/C++) プログラムの形式としてその人生を始めました。 .NET Framework の最初のリリースでは、.NET をサポートするように Windows PDB 形式が拡張されました。

ポータブル PDB 形式は .NET Core で導入され、.NET をターゲットにするときに既定で使用されます。 .NET Framework を対象とする場合は、プロジェクト ファイルで <DebugType>portable</DebugType> を指定することで、ポータブル PDB シンボルを有効にすることができます。 ポータブル PDB 形式は、ECMA-335 メタデータ形式に基づいています。 詳細については、「 ポータブル PDB v1.0: 形式の仕様」を参照してください。 診断ツールでは、 System.Reflection.Metadata ライブラリを使用してポータブル PDB ファイルを読み取ることができます (例については、 System.Reflection.Metadata.Documentを参照してください)。

シナリオに適した PDB 形式を使用する

ポータブル PDB も Windows PDB も、どこでもサポートされていません。 使用する形式を決定するには、プロジェクトを使用してデバッグする場所を検討します。 両方の形式で使用およびデバッグできるプロジェクトがある場合は、異なるビルド構成を使用し、プロジェクトを 2 回ビルドして両方の種類のコンシューマーをサポートできます。

ポータブル PDB のサポート

ポータブル PDB は、任意のオペレーティング システムで読み取ることができ、マネージド コードに推奨されるシンボル形式です。 ただし、サポートされていないレガシ ツールとアプリケーションは多数あります。

  • .NET Framework 4.7.1 以前を対象とするアプリケーション: 行番号に戻るマッピングが含まれるスタック トレースの出力 (ASP.NET のエラー ページなど)。 メソッドの名前は影響を受けません。ソース ファイル名と行番号のみがサポートされていません。

  • ildasm や .NET リフレクターなどの .NET 逆コンパイルを使用すると、ソース行マッピングやローカル パラメーター名は表示されません。

  • DIA の最新バージョンと、WinDBG などのシンボルの読み取りに DIA を使用するツールは、ポータブル PDB をサポートしていますが、古いバージョンではサポートされていません。

  • 移植可能な PDB をサポートしていない古いバージョンのプロファイラーが存在する可能性があります。

移植可能な PDB をサポートしていないツールで使用するには、ポータブル PDB と Windows PDB の間で変換する Pdb2Pdb を使用できます。

Windows PDB のサポート

Windows PDB は、Windows でのみ書き込みまたは読み取りを行うことができます。 マネージド コードに Windows PDB を使用することは古く、レガシ ツールでのみ必要です。 一部の新しいコンパイラ機能は移植可能な PDB にのみ実装されるため、Windows PDB の代わりにポータブル PDB を使用することをお勧めします。

こちらも参照ください