知識マップ: 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やビルド番号と紐づけて必ず保管することが実務上の推奨である。

PDBとデバッグ情報エコシステムの知識マップPDBがバイナリとソースを結びつけるデバッグ情報であること、Portable PDBとWindows PDBの違い、DebugTypeによる生成方式の切り替え、Source Link・シンボルサーバー・snupkgによるPDBの配布経路、ダンプ解析やスタックトレース表示にPDBが必要になること、CI/CDでの保管がPDB喪失を防ぐことを示す図前提とする前提とする前提とする利用する両立しない前提とするに保存されるの後継で構成できるで構成できる前提とする両立しないに保存される利用する推奨される対応防止する軽減する用いるのは非推奨推奨される対応推奨される対応PDB(プログラムデータベース)スタックトレースのファイル名・行番号表示ダンプ解析Windows PDBWinDbg.snupkg(NuGetシンボルパッケージ)Portable PDBシンボルサーバーDebugType(MSBuildプロパティ)embedded PDBSource LinkJust My CodeCI/CDでのPDB保管PDBの喪失決定的ビルド(Deterministic Build)private symbolsPDBの外部配布public symbols

概念間の関係(全20件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

PDB(プログラムデータベース)
ビルド後の.dll/.exeと、ソースコード上の行・変数名を結びつけるデバッグ情報ファイル。アプリケーションの実行には通常不要だが、デバッグ・例外調査・ダンプ解析に使う。
スタックトレースのファイル名・行番号表示
.NETの例外スタックトレースで、対応するソースファイル名と行番号まで表示させる機能。PDBが読み込まれているときに有効になる。
ダンプ解析
クラッシュやハングなどで取得したプロセスのダンプファイルから、スタックや変数、型を人間が読める名前やソース行に変換して調べる作業。
Windows PDB
Visual C++や.NET Framework時代のプロジェクトなど、従来のWindowsネイティブ開発で使われるPDB形式。
.snupkg(NuGetシンボルパッケージ)
NuGetのシンボルパッケージ形式で、管理コードのPortable PDBを配布するために使う。NuGet.orgのシンボルサーバーではPortable PDBのみサポートされる。
Portable PDB
.NET/.NET Core以降で使われる、Windowsだけでなくクロスプラットフォームで扱えるPDB形式。
embedded PDB
DebugTypeをembeddedに指定し、Portable PDB相当のデバッグ情報を別ファイルにせず.dll/.exeへ埋め込む方式。
Source Link
PDBに記録されたリポジトリ情報とコミット参照を使って、デバッガーがGitHub等からそのバイナリをビルドしたコミット時点のソースファイルを取得できるようにする仕組み。
CI/CDでのPDB保管
コミットID・ビルド番号・成果物(.dll/.exe/.pdb)をセットで保管し、本番バイナリに対応するPDBを後から取り出せるようにするCI/CDの運用。
決定的ビルド(Deterministic Build)
同じソース・同じ設定からビルドすれば同一の成果物が得られるようにするビルドの性質。.NETコンパイラのDeterministicオプションや`ContinuousIntegrationBuild`プロパティで関わる。
private symbols
ローカル変数・型・引数などを含む、完全に近い内部情報を持つシンボル情報。
public symbols
関数名やアドレスなど、公開用に絞られたシンボル情報。
シンボルサーバー
PDBなどのシンボルファイルを、ファイル名ではなくバイナリとの一致情報に基づいて整理し、デバッガーが必要なときに取得できるようにする仕組み。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。