PDB ファイルとは何か?

Visual Studio を使って C# アプリケーションをビルドすると、実行可能ファイル (*.exe ファイル) の他に、 *.pdb というファイルが作成されていることに気付いた方もいるのではないでしょうか。

これは一体何でしょうか?

PDB ファイルはデバッグのために使う

PDB ファイルというのは、プログラムデータベースといって、プログラムのデバッグ時に使うファイル です。 ソースコードのファイル名や行番号やシンボル情報 (変数名等) を保持しているので、そのため シンボルファイル と呼ばれます。

デバッガを使うときにシンボル情報を参照するのに使うファイルの総称として「シンボルファイル」といいます。昔は dbg ファイルなどと混在していた時期もありましたが、 現状では、シンボルファイルのファイル形式として PDB 一択です。そのため、シンボルファイルといったら pdb を指します。

そういう性質上、ソースコードを書き換えてプログラムをビルドし直したら、ソースコードの行番号なども変わるので PDB ファイルも新しく作り直す必要があります。Visual Studio ではそれを自動的にやってくれるように元々設定されています。

ちなみに、C# のプログラムを作ったからといって、必ずしも PDB ファイルを出力しないといけないか、というと全然そんなことはありません。 あくまでも任意のものです。基本的に実行時に PDB ファイルは使いません。

実行時に「PDB ファイルが存在すれば読み込む」場合としては、例えば例外捕捉時にスタックトレースを出力する場合があげられます。 スタックトレースでは関数名が表示Jされますが、もしシンボルファイルが存在すれば、同時にソースコードの行番号なども出力されます。

例えばコマンドラインから C# コンパイラでコンパイルしても、デフォルトでは PDB は出力されません。PDB ファイルを出力するには /debug+ オプションを指定します。

> csc /debug+ foo.cs

以上から、通常のデスクトップのプログラムで、Visual Studio などの統合開発環境の中で対話的にデバッグできる場合には、 あまりシンボルファイルを意識する必要はないでしょう。

その反面、サーバーやサービスプログラムのデバッグとかダンプ解析のように、 デバッガを駆使して何かしないといけないときには、シンボルファイルは必須になります。

というわけで、何か実行ファイルをビルドして、少なくとも本番環境で使うタイミングでは、念のため PDB ファイルもとっておいた方が万が一の時に役に立つので良いと思います。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門