0

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

アプリケーションをビルド(リンク)するためのバージョン(バージョンAなど)のユーティリティライブラリ(および関連するシンボル)があり、クラッシュが発生したときに実行時に別のバージョン(バージョンBなど)のユーティリティライブラリ(および関連するシンボル)を使用するとします。クラッシュダンプを分析するときに、Windbgでユーティリティライブラリ(および関連するシンボル)の別の異なるバージョン(バージョンCなど)を使用します。

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

よろしくお願いします、ジョージ

4

2 に答える 2

3

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

デバッグしている dll と一致しない場合、Windbg はシンボルをロードしません。シンボルのロード プロセスの詳細を確認するには、!sym ノイジーを使用できます。シンボル サーバーを使用しないことを選択した場合は、すべての pdb を手動で管理し、windbg に手動でロードできます (プロセスにロードされたモジュールに関する詳細情報を取得するには、lm v を使用します)。

于 2009-03-20T05:06:26.793 に答える
1

一般に、シンボルはコードと同じファイルにある必要があります (そのため、デバッグ バージョンは通常より大きくなります)。デバッガーが、あるバイナリーを実行中に別のバイナリーからシンボルをプルするケースを思い出すことはできませんが、これは一般的な知識によるものであり、環境に関する特別な情報によるものではありません。

于 2009-03-20T05:01:11.830 に答える