知識マップ: PDB(プログラムデータベース)とは何か ── デバッグ情報・シンボル・Source Linkを理解する
記事「PDB(プログラムデータベース)とは何か ── デバッグ情報・シンボル・Source Linkを理解する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
PDBはビルド後の.dll/.exeとソースコードを結びつけるデバッグ情報ファイルで、アプリケーションの実行そのものには不要だが、例外スタックトレースの行番号表示やダンプ解析にはPDBが必要になる。.NET Core以降はクロスプラットフォームなPortable PDBが中心になり、csprojのDebugTypeでportable・embedded・noneなどの生成方式を構成する。Source LinkはPDBに記録されたリポジトリ情報からビルド時点のコミットのソースを取得する仕組みで、シンボルサーバーや.snupkgはPDB自体を配布・保管する経路であり役割が異なる。外部配布ではローカル変数名まで含むprivate symbolsではなく関数名に絞ったpublic symbolsが推奨され、PDBを消してしまうと決定的ビルドでも完全な再現は難しいため、CI/CDでコミットIDやビルド番号と紐づけて必ず保管することが実務上の推奨である。
flowchart LR
accTitle: PDBとデバッグ情報エコシステムの知識マップ
accDescr: PDBがバイナリとソースを結びつけるデバッグ情報であること、Portable PDBとWindows PDBの違い、DebugTypeによる生成方式の切り替え、Source Link・シンボルサーバー・snupkgによるPDBの配布経路、ダンプ解析やスタックトレース表示にPDBが必要になること、CI/CDでの保管がPDB喪失を防ぐことを示す図
pdb["PDB(プログラムデータベース)"]
stack_trace_line_number["スタックトレースのファイル名・行番号表示"]
dump_analysis["ダンプ解析"]
windows_pdb["Windows PDB"]
windbg["WinDbg"]
snupkg[".snupkg(NuGetシンボルパッケージ)"]
portable_pdb["Portable PDB"]
symbol_server["シンボルサーバー"]
debugtype_msbuild["DebugType(MSBuildプロパティ)"]
embedded_pdb["embedded PDB"]
source_link["Source Link"]
just_my_code["Just My Code"]
cicd_pdb_retention["CI/CDでのPDB保管"]
pdb_loss["PDBの喪失"]
deterministic_build["決定的ビルド(Deterministic Build)"]
private_symbols["private symbols"]
pdb_external_distribution["PDBの外部配布"]
public_symbols["public symbols"]
stack_trace_line_number -->|"前提とする"| pdb
dump_analysis -->|"前提とする"| pdb
dump_analysis -.->|"前提とする"| windows_pdb
dump_analysis -.->|"利用する"| windbg
windows_pdb -->|"両立しない"| snupkg
snupkg -->|"前提とする"| portable_pdb
snupkg -->|"に保存される"| symbol_server
portable_pdb -.->|"の後継"| windows_pdb
pdb -->|"で構成できる"| debugtype_msbuild
embedded_pdb -->|"で構成できる"| debugtype_msbuild
source_link -->|"前提とする"| pdb
source_link -.->|"両立しない"| just_my_code
pdb -.->|"に保存される"| symbol_server
cicd_pdb_retention -.->|"利用する"| symbol_server
cicd_pdb_retention -->|"推奨される対応"| pdb
cicd_pdb_retention -->|"防止する"| pdb_loss
deterministic_build -.->|"軽減する"| pdb_loss
private_symbols -->|"用いるのは非推奨"| pdb_external_distribution
public_symbols -->|"推奨される対応"| pdb_external_distribution
symbol_server -.->|"推奨される対応"| pdb_external_distribution
概念間の関係(全20件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- スタックトレースのファイル名・行番号表示はPDB(プログラムデータベース)を前提とします。
- ダンプ解析はPDB(プログラムデータベース)を前提とします。
- ダンプ解析はWindows PDBを前提とします。
- ダンプ解析はWinDbgを利用します。
- Windows PDBは.snupkg(NuGetシンボルパッケージ)と両立しません。
- .snupkg(NuGetシンボルパッケージ)はPortable PDBを前提とします。
- .snupkg(NuGetシンボルパッケージ)はシンボルサーバーに保存されます。
- Portable PDBはWindows PDBの後継に当たります。
- PDB(プログラムデータベース)はDebugType(MSBuildプロパティ)で構成できます。
- embedded PDBはDebugType(MSBuildプロパティ)で構成できます。
- Source LinkはPDB(プログラムデータベース)を前提とします。
- Source LinkはJust My Codeと両立しません。
- PDB(プログラムデータベース)はシンボルサーバーに保存されます。
- CI/CDでのPDB保管はシンボルサーバーを利用します。
- CI/CDでのPDB保管はPDB(プログラムデータベース)に対する本記事の推奨です。
- CI/CDでのPDB保管はPDBの喪失を防ぎます。
- 決定的ビルド(Deterministic Build)はPDBの喪失を軽減します。
- private symbolsをPDBの外部配布に用いることは推奨されません。
- public symbolsはPDBの外部配布に対する本記事の推奨です。
- シンボルサーバーはPDBの外部配布に対する本記事の推奨です。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。