ホームページ  >  記事  >  バックエンド開発  >  pdbとは何のファイルですか?

pdbとは何のファイルですか?

青灯夜游
青灯夜游オリジナル
2020-07-28 11:27:2936905ブラウズ

pdb は、VS がコンパイルおよびリンクされるときに生成されるファイルである「プログラム データベース」ファイルを指します。 DPB ファイルには、ソース ファイル名、変数名、関数名、FPO、対応する行番号など、プログラムのデバッグ時に VS が必要とする基本情報が主に保存されます。 PDB ファイルはプロジェクトのコンパイル時に生成され、対応するモジュールとともに生成されます。

pdbとは何のファイルですか?

このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。

PDB (Program Database)、正式名は「Program Database」ファイルで、VS がコンパイルおよびリンクされるときに生成されるファイルです。 DPB ファイルには、主にソース ファイル名、変数名、関数名、FPO (フレーム ポインター)、対応する行番号など、プログラムのデバッグ時に VS が必要とする基本情報が格納されます。デバッグ情報が保存されるため、PDB ファイルは通常、デバッグ モードで生成されます。

PDB ファイルにはソース ファイル パスに関する関連情報が記録されるため、PDB ファイルをロードすると、関連するデバッグ情報をソース コードと照合できます。これにより、デバッグ中に関数呼び出し、変数値、その他の関連情報をリアルタイムで視覚的に確認できます。モジュールに記録されるPDBファイルは絶対パスです。したがって、モジュールが現在のコンピューターにロードされている限り、デバッガーはモジュール内のパス情報に基づいて対応する PDB ファイルを自然に見つけてロードします。同様に、PDB ファイルに記録されるソース ファイル パスも絶対パスであるため、PDB ファイルが現在のコンピュータにロードされ、対応するモジュールにデバッグされている限り、記録されたソース ファイルと一致し、視覚的に表示できます。対応する情報。

PDB ファイルはいつ生成されますか?

PDB ファイルはプロジェクトのコンパイル時に生成され、対応するモジュール (exe または dll) とともに生成されます。ローカルでのみ開発している場合はいつでも調整できるため、通常は PDB ファイルの重要性を認識していない可能性があります。ここでは、プライベート ビルドとパブリック ビルド 1 という 2 つの概念を紹介します。プライベート ビルドは開発マシンでのコンパイルを指し、パブリック ビルドはコンパイルを担当するマシンでのコンパイルを指します。

上で述べたように、コンパイル済みマシン上のデバッグに必要なファイルはすべてあるべき場所にあるため、通常は Private Build に問題はありません。デバッグできない問題のほとんどはパブリック ビルドの場合に発生します。

アプリケーションを製品として公開または販売する必要がある場合は、公開するバージョンの PDB ファイルとソース ファイルの保存に特別な注意を払う必要があります。注: パブリッシュされた PDB ファイルを保存できるのは 1 回だけであり、紛失すると回復できなくなります。 2 (理由は以下で説明します)

なぜ PDB がそれほど重要ですか?

おそらくあなたもまったく同じソースコードで PDB ファイルを再コンパイルし、それをデバッグに使用するだけです。私も、ある日までそう思っていました...

直接の理由は、VS によって生成されたバイナリ ファイルのヘッダー部分に、対応する PDB の GUID が含まれており、PDB にも GUIID が含まれていることです。コンパイル中に 2 つの GUID が追加されます。 VS デバッガは、PDB をロードするときに 2 つの GUID を比較します。それらが矛盾している場合、それらは使用できません。

もちろん、上記の理由は表面的な現象にすぎず、根本的な理由は、コンパイラによってコンパイルされたファイルが 2 つの同一のコードとは異なる可能性があることです。コンパイラはコンパイル時にコードを最適化し、同じコードには多数の最適化方法がある可能性があるため、その時点の特定のマシン環境に基づいて最も高速な生成方法を選択します。したがって、生成されるファイルは異なる可能性があります。したがって、生成されるファイルさえ異なる場合、元の PDB 内のシンボルに対応するアドレスは意味を持ちません。

バイナリ ファイルと PDB の GUID を表示するにはどうすればよいですか?

VS に付属の DUMPBIN ツールを使用して、バイナリ ファイルで予期される PDB の GUID を表示します。基本的な使用方法は DUMPBIN /HEADER ファイルです。具体的な使用方法については、MSDN (http://msdn.microsoft.com/zh-cn/library/c1h23y6c(v=vs.80).aspx) を参照してください。

PDB の GUID を表示するには、次のツールを使用して PDB を直接取り込むことができます。

#http://www.codeproject.com/Articles/37456/プログラム データベースのコンテンツを検査する方法

PDB ファイルの検索方法

最初にテスト結果を表示し、デバッグ中に Visual Studio のモジュール シリアル ポートからモジュールのシンボルの検索方法を見つけることができます。スクリーンショットから、次のような結果がわかります:

pdbとは何のファイルですか?

1. ファイルが実行またはロードされるアドレス

2. それは難しいです。ヘッダー内のアドレスを PE ファイルにコーディングします。 obj\ は最初に生成されたアドレスですが、後で最初のアドレスにコピーされたことがわかります。

2.5 シンボル サーバーが構成されている場合は、2 番目の手順の後、まずシンボル サーバーのキャッシュ ディレクトリを検索する必要があります。見つからない場合は、シンボル サーバーに移動して検索します。見つかった場合は、キャッシュ ディレクトリにダウンロードされます。

3. 3 番目の部分は、VS で設定されたいくつかのシンボル クエリのディレクトリです。Reflector をインストールしているため、これらのディレクトリはデフォルトで設定に追加されます。

4. Windows フォルダー。

ここでの興味深い現象は、VS の検索戦略が最初にディレクトリ内でsymbol\exe\project.pdbを見つけ、次にexe\project.pdbを見つけ、最後にproject.pdbを見つけるということです。この順番はちょっと意外です。

PDB ファイルはパフォーマンスに影響しますか?

PDB ファイルの生成は最終アプリケーションのパフォーマンスに一定の影響を与えるため、リリース バージョンでは PDB ファイルを生成すべきではないと考える人もいるかもしれません。 ######間違っている! .NET アプリケーションの場合、PDB ファイルの生成はコンパイラーの最適化には影響しないため、アプリケーションのパフォーマンスにはまったく影響しません。生成されたアセンブリ内の 1 つの DebuggableAttribute 属性のみに影響します。興味のある方は、「Do PDB Files Affect Performance?

」を参照してください。関連ビデオ チュートリアルの推奨事項: 「

ASP.NET チュートリアル

以上がpdbとは何のファイルですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。