[解決済み】リリースで.pdbファイルが生成されるのはなぜですか?
質問
なぜ Visual Studio 2005 は
.pdb
ファイルを作成することはできますか? リリースビルドのデバッグをすることはありませんが、なぜこのようなファイルが生成されるのでしょうか?
解決方法を教えてください。
なぜなら、PDB ファイルがなければ、アドレスレベルのデバッグ以外の方法で "Release" ビルドをデバッグすることが不可能になるからです。 最適化はコードに大きな影響を与えるため、何か問題が発生した場合(例えば、例外が発生した場合)、その原因を突き止めることが非常に困難です。ソースコードの行を生成されたアセンブリコードと一対一で(あるいは同じ順序で)マッチングさせることができないため、ブレークポイントを設定することさえ非常に困難です。PDBファイルは、あなたとデバッガーを助け、事後デバッグを非常に簡単にします。
ソフトウェアがリリースできる状態であれば、それまでにすべてのデバッグを終えているはずだという指摘がありますね。確かにその通りなのですが、いくつか注意すべき点があります。
-
あなたは また リリースする前に)アプリケーションのテストとデバッグを "Release" ビルドを使って行ってください。なぜなら、最適化をオンにすると("Debug"の設定ではデフォルトで無効になっています)、他の方法では発見できないような微妙なバグが現れる場合があるからです。このようなデバッグを行う場合、PDBシンボルが必要になります。
-
エッジケースや理想的な条件下でしか発生しないバグが、お客様からよく報告されます。これらは、ユーザーのマシンの奇妙な構成に依存しているため、ラボで再現することはほとんど不可能です。特に親切な顧客であれば、スローされた例外を報告し、スタックトレースを提供してくれるでしょう。あるいは、あなたのソフトウェアをリモートでデバッグするために、彼らのマシンを貸してくれるかもしれません。どちらの場合でも、PDBファイルはあなたの助けになるはずです。
-
プロファイリングは 常に は、最適化を有効にした 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ファイルを作成し、アーカイブする方がはるかに簡単なのは言うまでもありません。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】Visual Studio 2012 Release Previewのインストール後に「LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt」エラーが発生する。
-
[解決済み] AndroidでWCFサービスを利用する方法
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] Visual Studioでコマンドラインパラメータを使ったデバッグを行う
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイラーエラーメッセージ。コンパイラはエラーコード -532462766 で失敗しました。
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] Marginのプロパティ順
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] app.configが作成されるタイミングとapp.exe.configが作成されるタイミング、その違いとは?
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] Microsoft.ACE.OLEDB.12.0' プロバイダがローカルマシンに登録されていません。
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?