2009-03-20 3 views
0

私は、WindbgまたはVisual Studioを使用してダンプファイルを解析する際に、どのシンボルファイルが使用されるかに興味があります。私のアプリケーションがユーティリティライブラリを使用しており、ユーティリティライブラリに関連するプライベートシンボルファイルがあるとします。私のアプリケーションにクラッシュダンプがある場合、完全なコールスタックを分析するためにユーティリティライブラリのシンボルが必要です。しかし、時には、ビルド/ランタイム/デバッグ環境は、異なるバージョンのユーティリティライブラリシンボルである(確かに)異なるバージョンのユーティリティライブラリと共にインストールされます。デバッグシンボルの問題

私のアプリケーションをビルド(リンク)するためのユーティリティライブラリ(およびバージョンA)のバージョン(たとえばバージョンA)があり、そこに別のバージョン(たとえばバージョンB)のユーティリティライブラリ(および関連シンボル)クラッシュダンプを解析するときにWindbgの別のバージョン(たとえばバージョンC)のユーティリティライブラリ(および関連シンボル)を使用しています。

私の質問は、クラッシュがランタイムに生成されると、バージョンBシンボルがクラッシュダンプを生成するために使用されることです(シンボル情報でダンプを埋めるために)?しかし、Windbgデバッグ環境で異なるバージョンのシンボルCを使用すると、シンボルの不一致の問題が発生します。ビルドに使用するライブラリのバージョンは関係ありませんか?私の理解はすべて正しいですか?事前に

おかげで、 ジョージ

答えて

1

は、一般的記号は、コードと同じファイルにする必要があります(デバッグバージョンは、一般的に大きくなっている理由です)。デバッガが別のバイナリを実行している間に、あるバイナリからシンボルを引き出すケースを思い出すことはできませんが、これは一般的な知識であり、環境に関する特別な情報ではありません。

+0

Hi MarkusQ、 (ビルド/実行/デバッグは異なるパーティによって実行され、まだ同期されていません)異なるバイナリが使用されます。私の質問は、ダンプが生成されるとき、ダンプはダンプ情報を埋めるためにランタイムライブラリシンボルに依存していますか? – George2

+0

@George - 私は一般的に話していました。詳細はMatt Ellisの答えを参照してください。 (私は彼をupvotingしています) – MarkusQ

+0

MarkusQ、私は彼のポストから私の答えを見つけませんでした - なぜ環境が(クラッシュダンプを生成する)シンボルの別のバージョンを使用している場合、シンボルの不一致があるしかし、ダンプを分析するためにwindbgを実行する環境は、別のバージョンのシンボルを使用していますか? – George2

3

Symbol Serverを使用して、WinDBGまたはVSがデバッグしているライブラリのビルドに対応するシンボルをプルダウンできるように思えます。それが第三者コンポーネントであり、あなたがプライベートシンボルを持っている場合は、それらのシンボルを自分のサーバに置くか、またはサードパーティにパブリックシンボルサーバがあるかどうかを確認することができます。

あなたがデバッグしているdllと一致しない場合、Windbgはシンボルを読み込まないので、!sym noisyを使ってシンボルの読み込みプロセスについてもっと知ることができます。シンボルサーバを使用しない場合は、手作業ですべてのpdbを管理し、手作業でwindbgにロードすることができます(lm vを使用して、プロセスにロードされたモジュールに関する詳細情報を取得してください)

+0

環境(クラッシュダンプを生成する)が別のバージョンのシンボルを使用しているのに、windbgを実行してダンプを分析する環境が別のバージョンを使用している場合、シンボルの不一致がある(または間違った情報を報告する)シンボル? – George2

+0

私はシンボルサーバーを使用することに同意するシンボル解決策は良い解決策ですが、私の環境では、非技術的理由のために、ランタイム/ビルド/デバッグは、人々の異なるグループによって実行され、すぐに。 :-) – George2

+0

最初の例では、問題のデバッグを使用しているマシンのシンボルが、ダンプを取ったdllと一致しない場合、ミスマッチが発生します。この場合は、シンボルをローカルマシンにコピーし、sympathへのディレクトリを追加してからaを実行する必要があります。reload/f –

関連する問題