WinDbg博士.Watson ミニダンプ - インストールされているバージョン用に元々構築された pdb/dll が必要ですか?

StackOverflow https://stackoverflow.com/questions/134866

質問

ターゲットのアプリケーションクラッシュからのmindmpファイルがあります。ソフトウェアのバージョンに合わせて dll/pdb ファイルを再構築し、windbg にシンボルを正しくロードさせることは可能ですか?

私の問題は、pdb ファイルがメジャー リリース用にのみ保持されていることです (残念ながら)。これは毎日のビルドなので、自分で再構築できますが、エラーでつまずいてしまいます。

!sym noisy がオンの場合:「イメージ ヘッダーがメモリ イメージ ヘッダーと一致しません。」

DBGENG:  C:\...\XXX.dll image header does not match memory image header.
DBGENG:  XXX.dll - Partial symbol image load missing image info
DBGHELP: Module is not fully loaded into memory.
DBGHELP: Searching for symbols using debugger-provided data.
DBGHELP: C:\...\XXX.pdb - mismatched pdb

dll を使用して pdb をビルドしたことに注意してください。それらは同じ RELEASE ディレクトリからのものです (デバッグをビルドする必要がありますか?)

これらはリリース ビルドです (リリース ビルドはターゲットにインストールされ、クラッシュするため) 何らかの方法でデバッグ ビルド DLL を使用して、より多くのシンボル情報を取得する必要がありますか?

役に立ちましたか?

解決

私の経験ではおそらくそうではありません。

正確なビルド ディレクトリがあり、次のコマンドを使用してビルドする場合 全く同じ コンパイラの設定があれば、これは機能する可能性があります。リリース クラッシュ ダンプに対してデバッグ ビルドからシンボルをロードすることはできません。

「何でもロード」オプションをオンにする必要があります。.symopt+0x40 は、windbg がタイムスタンプの違いを無視するようにします。

他のヒント

チェックマッチ ユーティリティは、まさにこのシナリオ向けに設計されています。元の .EXE があれば、(同じコンパイラとコンパイラ設定を使用して) ソースを再コンパイルし、古い .EXE と一致するように新しい .PDB にパッチを適用できます。

この例では、 オリジナル実行可能ファイル.exe .PDB ファイルがなくなった実行可能ファイル、および 再構築されたPDB.pdb オリジナルソースを再構築して制作されたものです。

chkmatch -m OriginalExecutable.exe RebuiltPDB.pdb

ここで、2 つのファイルが元の名前を持っている限り、デバッガーはそれらを一致するペアとして受け入れる必要があります。

イメージのコンパイル元となった正確なソース コードがまだ残っている場合は、それを再構築して新しい pdb ファイルを生成し、クラッシュ ダンプを開いたときにこの pdb ファイルを強制的にロードするように WinDbg に指示します。私の実践では一度うまくいきました。

PDB ファイルは、GUID と「経過時間」(シーケンス番号) によって EXE ファイルに関連付けられています。これらは EXE と PDB に埋め込まれます。GUID は完全なビルドごとに再生成され、「経過時間」は増分ビルドごとに変更されます。

デバッガーはこれらを使用して、EXE ファイルの正しい PDB を参照していることを確認します。

SteveMan が言及した「chkmatch」ツールについては知りませんでしたが、GUID と年齢が一致するようにパッチを適用することで機能するのではないかと思います。

Doug を助けるには遅すぎますが、この質問に遭遇した人のために、別のスレッド (Visual Studio で一致しないシンボルを読み込むことはできますか?) WinDbg が不一致の .PDB ファイルを受け入れるようにする方法を指摘しました

.symopt_0x40
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top