Symbols
シンボルは、デバッグや他の診断ツールに役立ちます。 シンボル ファイルの内容は、言語、コンパイラ、およびプラットフォームによって異なります。 大まかに言うと、シンボルはソース コードとコンパイラによって生成されたバイナリとの間のマッピングです。 これらのマッピングは、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 の最初のリリースで、Windows PDB 形式は .NET をサポートするように拡張されました。
ポータブル PDB 形式は .NET Core で導入され、.NET を対象とする場合に既定で使われます。 .NET Framework を対象とする場合、プロジェクト ファイルで <DebugType>portable</DebugType>
を指定することでポータブル PDB シンボルを有効にできます。 ポータブル PDB 形式は ECMA-335 メタデータ形式に基づいています。 詳細については、「Portable 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 Reflector などの .NET 逆コンパイラを使う場合、ソース行マッピングやローカル パラメーター名は表示されません。
DIA の最新バージョンと、シンボルの読み取りに DIA を使うツール (WinDBG など) ではポータブル PDB をサポートしていますが、以前のバージョンではサポートされていません。
以前のバージョンのプロファイラーでは、ポータブル PDB がサポートされていない場合があります。
ポータブル PDB をサポートしていないツールでポータブル PDB を使うには、ポータブル PDB と Windows PDB の間で変換を行う Pdb2Pdb を使うことができます。
Windows PDB のサポート
Windows PDB の書き込みまたは読み取りは、Windows 上でのみ可能です。 マネージド コードへの Windows PDB の使用は廃止されており、レガシ ツールでのみ必要です。 一部の新しいコンパイラ機能はポータブル PDB にのみ実装されているため、Windows PDB ではなくポータブル PDB を使うことをお勧めします。
関連項目
- dotnet-symbol を使用して、フレームワーク バイナリ用のシンボル ファイルをダウンロードできます
- シンボルに関する Windows のドキュメント
.NET