2

Visual Studio(またはWinDBG)を使用して別のマシンからWindowsプロセスダンプファイルをロードすると、次のような多くのメッセージが表示されます。

(Visual Studio 2005からの出力)

'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\ntdll.dll\411096d4b7000\ntdll.dll', Symbols loaded (source information stripped).
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\kernel32.dll\411096d4106000\kernel32.dll', Symbols loaded (source information stripped)
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\wsock32.dll\41109712a000\wsock32.dll', Symbols loaded (source information stripped).
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\winmm.dll\411096df2e000\winmm.dll', Symbols loaded (source information stripped).
...

これらのメッセージは、デバッガーがシンボルキャッシュ(http://msdl.microsoft.com/download/symbolsから)からこれらすべてのシステムDLLの正確なバージョンを(正しく)ロードしていることを示しています。

ただし、次のようなメッセージも表示されます。

'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\iphlpapi.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'C:\WINDOWS\system32\mfc42loc.dll', Binary was not built with debug information.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\xpsp2res.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\msjet35.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\msjter35.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\msjint35.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\vbscript.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05\mfc80u.dll', Symbols loaded.
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\msvcr80.dll', Symbols loaded.
...

したがって、私のマシンにインストールされているバージョンが実際にダンプが生成されたマシンのDLLと一致するファイルと、私のマシンのバージョンがそのマシンにあるバイナリと一致しないファイルがあるように見えます。ダンプを生成しましたが、MSシンボルサーバーにこれらのDLLのbin/symbolが含まれていないようです。

上記のDLL(iphlpapi.dll、...、msjint35.dll、...)は間違いなくMSからのものであるため、シンボルサーバーからフェッチされていないものが不足しているのではないかと思いました

または、プロセス(-dumps)にシンボルのないDLLがあり、クラッシュコールスタックにそのようなDLLが含まれている場合は、幸運にも呼び出しに対応する必要があります使用できるスタック?

(注:上記の出力は単なる例です。ただし、プログラムは任意のDLLの任意の呼び出しにガベージを渡すことができるため、ロードされたほとんどすべてのDLLでクラッシュが発生する可能性があります。)

4

1 に答える 1

3

残念ながら、MS で利用可能な最新のシンボルを維持するプロセスは、ロバの群れによって実行されているようです。そのほとんどは数年前に死亡し、残りのロバは 5 月の第 2 木曜日を含むシフト パターンでのみ機能します。 1月の日曜日に満月があった限り。

そのため、欠落しているシンボルがたくさん見つかる (見つからない) ことを期待できますが、それについてできることはあまりありません。Fiddler を実行すると、シンボルの呼び出しが正しく行われており、symserv によって 404 が実行されていることを確認できますが、それ以上は何もしなくてもかまいません。

10 年前にビジネス全体が自動化されなかった理由はわかりません。そのため、誰もシンボルを公開せずに MS から何かをリリースすることはありませんでしたが、そうではありませんでした。

于 2011-04-19T18:33:03.350 に答える