web-dev-qa-db-ja.com

PDBファイルの使用方法

PDBファイルを使用すると、クラッシュが発生した場所の診断に役立つと聞きました。
私のbasic理解は、Visual Studioにソースファイル、pdbファイル、およびクラッシュ情報を提供することです(ワトソン博士から?)
誰かがそれがどのように機能するのか、何が関係しているのか説明してください。 (ありがとうございました!)

45
hamishmcn

PDBファイルは、プロジェクトをビルドするときに生成されます。これらには、Visual Studioが解釈できるビルドされたバイナリに関する情報が含まれています。

プログラムがクラッシュし、クラッシュレポートが生成されると、Visual Studioはそのレポートを取得し、アプリケーションのPDBファイルを介してソースコードにリンクすることができます。 PDBファイルは、クラッシュレポートを生成したのと同じバイナリから構築する必要があります!

時間の経過とともに発生した問題がいくつかあります。

  • クラッシュレポートをデバッグしているマシンは、バイナリを構築したマシンと同じパスにソースがある必要があります。
  • リリースビルドは、多くの場合、オブジェクトメンバー変数の状態を表示できない程度まで最適化されます。

前者を打ち負かす方法を知っている人がいれば、何らかの入力に感謝します。

34
roo

PDBファイルは、アセンブリのMSILを元のソース行にマップします。つまり、アセンブリでコンパイルされたPDBをアセンブリと同じディレクトリに配置すると、例外スタックトレースには、元のソースファイルの位置の名前と行が含まれることになります。 PDBファイルがない場合、スタックトレースの各レベルのクラスとメソッドの名前のみが表示されます。

38

シンボルサーバーのセットアップと、ソースコード管理システムへのPDBファイルのインデックス作成を検討する必要があります。私は最近、私たちの製品でこのプロセスを経験しましたが、非常にうまく機能しています。バイナリでPDBファイルを使用可能にすることや、ダンプファイルをデバッグするときに適切なソースコードを取得する方法について心配する必要はありません。

ジョン・ロビンズの本: http://www.Amazon.com/Debugging-Microsoft-NET-2-0-Applications/dp/0735622027/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1222366012&sr=8-1

ミニダンプを生成するためのサンプルコードについては、こちらをご覧ください(クラッシュ後の分析に限定する必要はありません。コードの任意の時点でクラッシュせずに生成できます): http://www.codeproject .com/KB/debug/postmortemdebug_standalone1.aspx

12
lesscode