質問
PDB ファイルを使用すると、クラッシュが発生した場所を診断するのに役立つと聞いたことがあります。
私の 基本的な Visual Studio にソース ファイル、pdb ファイル、クラッシュ情報 (ワトソン博士から?) を与えるということを理解しています。
誰かがそれがどのように機能するのか/何が関係しているのか説明してもらえますか?(ありがとう!)
解決
PDB ファイルは、プロジェクトをビルドするときに生成されます。これらには、Visual Studio が解釈できるビルドされたバイナリに関連する情報が含まれています。
プログラムがクラッシュしてクラッシュ レポートが生成されると、Visual Studio はそのレポートを取得し、アプリケーションの PDB ファイルを介してソース コードにリンクし直すことができます。PDB ファイルは、クラッシュ レポートを生成したのと同じバイナリから構築する必要があります。
時間が経つにつれ、いくつかの問題が発生しました。
- クラッシュ レポートをデバッグしているマシンには、バイナリをビルドしたマシンと同じパス上にソースが存在する必要があります。
- リリース ビルドでは、オブジェクト メンバー変数の状態を表示できない程度に最適化されることがよくあります。
前者を倒す方法を知っている人がいたら、入力していただければ幸いです。
他のヒント
PDB ファイルは、アセンブリの MSIL を元のソース行にマップします。つまり、アセンブリを使用してコンパイルされた PDB をアセンブリと同じディレクトリに配置すると、例外スタック トレースには、元のソース ファイル内の位置の名前と行が含まれることになります。PDB ファイルがないと、スタック トレースの各レベルのクラスとメソッドの名前のみが表示されます。
シンボル サーバーをセットアップし、ソース コード管理システムに対して PDB ファイルのインデックスを作成することを検討する必要があります。私はつい最近、当社の製品に対してこのプロセスを実行しましたが、非常にうまく機能しました。PDB ファイルをバイナリで使用できるようにすることや、ダンプ ファイルをデバッグするときに適切なソース コードを取得する方法について心配する必要はありません。
ミニダンプを生成するためのサンプル コードについては、ここを参照してください (クラッシュ後の分析に限定する必要はありません。コード内のどの時点でもクラッシュすることなく生成できます)。 http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx