PDBファイルとは?


252

PDBファイルとは何ですか?ソリューションを再構築するときに、それをリリースフォルダーから除外するにはどうすればよいですか?


17
pdbはプログラムデータベースファイルであり、コンパイル時に作成されます。このファイルは、プログラムのデバッグ構成のインクリメンタルリンクを可能にするデバッグおよびプロジェクトの状態情報を保持します。
pavanred

@pavanred C#コンパイラもインクリメンタルリンクを実行しますか?C ++の世界でしか聞いたことがありません。C ++プロジェクトでは、プロジェクトプロパティからのインクリメンタルリンクを有効/無効にします。C#プロジェクトにもオプションはありますか?
RBT

回答:


236

PDBファイルには、デバッガーが操作するための情報が含まれています。いずれにしても、デバッグビルドよりもリリースビルドの方が情報が少なくなります。ただし、まったく生成しない場合は、プロジェクトのビルドプロパティに移動し、リリース構成を選択して、[詳細...]をクリックし、[デバッグ情報]で[なし]を選択します。


2
@ジョンアプリケーションが使用中にクラッシュした場合、ユーザーに追加情報を提供するのに役立ちますか?(つまり、「このプログラムは終了し、Windowsエラーレポートを送信する必要がある」ではなく、JITウィンドウに役立ちます)
Jared Harley

19
例外をコードの特定の行まで追跡できるようにするため、これらをデバッグリリースに含めておく必要があることに注意してください。pdbファイルにシンボルがないと、特定の問題を特定して問題を解決するのが難しくなります。大きなレポートの追加情報が非常に役立つ場合があるため、リリースビルドからそれらを除外する必要はありません。
Darbio

4
@Jared:はい、例外のスタックトレースが含まれています。これにより、特定の関数とコード行を特定できます。
Darbio

1
@Jared:「JITウィンドウ」とはどういう意味ですか?ユーザーにより多くの情報を提供することはほとんどありませんが、必要に応じて、リリースビルドにデバッガーをアタッチできる場合があります。通常、エンドユーザーアプリケーションには含めません。もちろん、Releaseフォルダーにコピーされたからといって、インストーラーで出荷する必要があるわけではありません...
Jon Skeet

3
@Ata:PDFではなくPDB。この2つを分けて考えてください。これらは、異なる目的のために、完全に異なるファイル形式です。PDBを含めても、特に問題は発生しません。それハッカーの仕事を少し簡単にするかもしれませんが、それはあなたにとって特に心配ですか?一般に、.NETはほとんどの場合比較的簡単に逆コンパイルできます。それが心配な場合は、PDBを出荷しないだけでは良い解決策ではありません。
Jon Skeet、

130

私はもともと「自分のマシンにPDBファイルをデプロイする必要があるのですか?」と自問し、この投稿を読んだ後、ファイルを除外することにしました。

今日まで、問題を含むメッセージボックスException.StackTraceにファイルと行番号の情報が欠落している理由を解明しようとしたところ、例外のトラブルシューティングに必要でした。私はこの投稿をもう一度読んで、情報の重要なナゲットを見つけました。アプリを実行するためにPDBは必要ありませんが、ファイルと行番号がStackTrace文字列に存在する必要があるということです。PDBファイルを実行可能フォルダーに含めましたが、今ではすべて問題ありません。


2
これは、accepted answerここでは触れられていない、覚えておくべき非常に重要な部分です。
Monku

85

PDBP rogram D ata B aseの略です。名前が示すように、これは、プログラムをデバッグモードで実行するために必要な情報を維持するためのリポジトリ(データベースなどの永続的なストレージ)です。これには、(Visual Studioで)コードをデバッグするときに必要な多くの重要な関連情報が含まれています。

これが、*.pdbデバッグフォルダーからファイルを削除した場合にVisual Studioがブレークポイントに到達できないことがよくある理由です。Visual Studioデバッガーは、ファイルを使用して、スタックトレースで例外が発生したコードファイルの正確な行番号を通知することもでき*.pdbます。したがって、事実上、pdbファイルは、プログラムのデバッグ中に開発者に恩恵をもたらします。

通常、*.pdbファイルの生成を除外することはお勧めしません。本番リリースの観点からは、pdbファイルを作成する必要がありますが、製品インストーラーで顧客サイトに出荷しないでください。必要に応じて、生成されたすべてのPDBファイルを、将来使用または参照できる場所からシンボルサーバーに保存します。特に、プロセスクラッシュなどの問題をデバッグする場合。クラッシュダンプファイルの分析を開始すると*.pdb、ビルドプロセス中に作成された元のファイルが保持されない場合、Visual Studioはクラッシュの原因となっている正確なコード行を作成できません

*.pdbすべてのリリースでファイルの生成を完全に無効にする場合は、プロジェクトのプロパティに移動します-> [ビルド]タブ->ボタンをクリックしAdvancedます-> [ noneデバッグ情報]ドロップダウンボックスから選択-> OK下のスナップショットに示すように押します。

C#プロジェクトのデバッグ情報設定なし

:この設定は、「デバッグ」と「リリース」のビルド構成では別々に行う必要があります。


13

PDBファイルは、デバッガが使用する情報が含まれています。アプリケーションを実行する必要はなく、リリースされたバージョンに含める必要もありません。

Visual Studioでpdbファイルが作成されないようにすることができます。コマンドラインまたはスクリプトからビルドする場合は、/Debugスイッチを省略します。


2
リリースモードでは、デフォルトでPDBが引き続きビルドされると思います。ただし、プロジェクトのプロパティを変更して無効にすることもできます。
Jon Skeet、

うん; それはまだデフォルトのプロジェクトのリリースに付属しています。
Andrew Barber、

チェックしたところ、Visual Studioを使用している場合はデフォルトで1つ取得しました。
Mark Byers、

4

プログラムデバッグデータベースファイル(pdb)は、デバッグ情報を格納するためのMicrosoftによるファイル形式です。

Visual Studioまたはコマンドプロンプトを使用してプロジェクトをビルドすると、コンパイラはこれらのシンボルファイルを作成します。

Microsoftドキュメントを確認する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.