1. ホーム
  2. .net

[解決済み】リリースで.pdbファイルが生成されるのはなぜですか?

2022-03-31 07:36:03

質問

なぜ Visual Studio 2005 は .pdb ファイルを作成することはできますか? リリースビルドのデバッグをすることはありませんが、なぜこのようなファイルが生成されるのでしょうか?

解決方法を教えてください。

なぜなら、PDB ファイルがなければ、アドレスレベルのデバッグ以外の方法で "Release" ビルドをデバッグすることが不可能になるからです。 最適化はコードに大きな影響を与えるため、何か問題が発生した場合(例えば、例外が発生した場合)、その原因を突き止めることが非常に困難です。ソースコードの行を生成されたアセンブリコードと一対一で(あるいは同じ順序で)マッチングさせることができないため、ブレークポイントを設定することさえ非常に困難です。PDBファイルは、あなたとデバッガーを助け、事後デバッグを非常に簡単にします。

ソフトウェアがリリースできる状態であれば、それまでにすべてのデバッグを終えているはずだという指摘がありますね。確かにその通りなのですが、いくつか注意すべき点があります。

  1. あなたは また リリースする前に)アプリケーションのテストとデバッグを "Release" ビルドを使って行ってください。なぜなら、最適化をオンにすると("Debug"の設定ではデフォルトで無効になっています)、他の方法では発見できないような微妙なバグが現れる場合があるからです。このようなデバッグを行う場合、PDBシンボルが必要になります。

  2. エッジケースや理想的な条件下でしか発生しないバグが、お客様からよく報告されます。これらは、ユーザーのマシンの奇妙な構成に依存しているため、ラボで再現することはほとんど不可能です。特に親切な顧客であれば、スローされた例外を報告し、スタックトレースを提供してくれるでしょう。あるいは、あなたのソフトウェアをリモートでデバッグするために、彼らのマシンを貸してくれるかもしれません。どちらの場合でも、PDBファイルはあなたの助けになるはずです。

  3. プロファイリングは 常に は、最適化を有効にした Release" ビルドで行います。また、PDBファイルを使用すると、プロファイリングの対象となるアセンブリ命令を、実際に記述したソースコードにマッピングすることができるため、便利です。

PDBファイルをさかのぼって生成することはできない をコンパイルしてください。 * ビルド時に作成しないと、機会損失となります。作っておいて損はない。もし配布したくないのであれば、バイナリから省けばいいだけです。しかし、後でそれが欲しいと思ったら、あなたは運が悪いのです。 万が一に備えて、常に生成し、そのコピーをアーカイブしておくとよいでしょう。

どうしても消したいのであれば、いつでも可能です。プロジェクトのプロパティ・ウィンドウで、変更したい設定について、"Debug Info"オプションを"none"に設定します。

ただし、"Debug" と "Release" の設定には注意が必要です。 する は、デフォルトでデバッグ情報の送信に異なる設定を使用します。この設定はそのままにしておいてください。Debug ビルドの場合、"Debug Info" オプションは "full" に設定され、PDB ファイルに加え、デバッグ用シンボル情報がアセンブリに埋め込まれることになり ます。また、edit-and-continue のようなクールな機能をサポートするシンボルも得られます。Releaseモードでは、"pdb-only"オプションが選択され、その名の通り、PDBファイルのみを含み、アセンブリのコンテンツには影響を与えません。つまり、アセンブリの内容に影響を与えることなく、PDBファイルだけが含まれるという単純なものではありません。 /bin ディレクトリに格納されます。しかし、"pdb-only" オプションを使用すると仮定すると、PDBファイルの存在はコードのランタイムパフォーマンスに何ら影響を与えません。

<サブ * として マーク・シャーマンがコメントで指摘する ソースコードが変更されていない限り(あるいはバージョン管理システムからオリジナルのコードを取得できる限り)、ソースコードをリビルドして一致するPDBファイルを生成することができます。少なくとも、通常は。これはたいていの場合うまくいきますが コンパイラは、同じコードをコンパイルするたびに同一のバイナリを生成することは保証されていません。 そのため かもしれません。 は微妙な違いがあります。さらに悪いことに、その間にツールチェインをアップグレードした場合(Visual Studioのサービスパックの適用など)、PDBが一致する可能性はさらに低くなります。の信頼できる生成を保証するために 事後 PDBファイルは、ソースコードをバージョン管理システムでアーカイブするだけでなく、ビルドツールチェーン全体のバイナリをアーカイブして、ビルド環境の構成を正確に再現できるようにする必要があります。もちろん、PDBファイルを作成し、アーカイブする方がはるかに簡単なのは言うまでもありません。