4

クラッシュ ダンプのデバッグを行っています。ここでは、運用サーバーから取得したダンプを探しています。WinDbg を実行しているマシンには、わずかに異なるバージョンの .NET ランタイムがインストールされている必要があります。.NET システム アセンブリのネイティブ イメージをロードするときにエラーが発生します (たとえば、ロードできませんSystem.Data.Linq)。

デバッグ マシンがすべての適切なシンボルにアクセスできるようにする最善の方法は何ですか?

編集 Thomas Weller の lmv の出力を追加

000007fb`68660000 000007fb`68993000   System_Data_Linq_ni C (pdb symbols)          C:\Program Files\Debugging Tools for Windows (x64)\sym\System.Data.Linq.pdb\703A918D116A4558BB44245924371ACD1\System.Data.Linq.pdb
    Loaded symbol image file: System.Data.Linq.ni.dll
    Image path: C:\Windows\assembly\NativeImages_v4.0.30319_64\System.Data.Linq\acbd568cd3c2499fbb7b2639c4a46a81\System.Data.Linq.ni.dll
    Image name: System.Data.Linq.ni.dll
    Has CLR image header, track-debug-data flag not set
    Timestamp:        Fri Apr 11 20:41:26 2014 (534899C6)
    CheckSum:         00000000
    ImageSize:        00333000
    File version:     4.0.30319.34209
    Product version:  4.0.30319.34209
    File flags:       0 (Mask 3F)
    File OS:          4 Unknown Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
4

3 に答える 3

9

名前のniは、これがマシンごとに異なるネイティブ バージョン (ngen 最適化) であることを示しています。ngen で dmp を取得したマシンに PDB を作成する必要があります。

ngen createpdb C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Data.Linq\
f989891b3a507d4aaec44ab1df12e9d5\System.Data.Linq.ni.dll c:\symbols /debug

PDB を C:\symbols から Windbgs シンボル パスに追加します。

于 2015-09-05T05:52:03.133 に答える
3

次のコマンドを実行して、WINDBG に Microsoft サーバーから公式シンボルをダウンロードさせることができます。

.sympath srv*c:\symbols*http://msdl.microsoft.com/download/symbols
.reload /f

これにより、サーバーからダウンロードされたシンボルが のローカル キャッシュに保存され、C:\Symbols現在ロードされているすべてのモジュールのシンボルが強制的にリロードされます。

于 2015-09-04T19:40:13.120 に答える
2

.NET について考慮すべき点がいくつかあります。

  1. .NET の適切なダンプ、つまり 64 ビット プロセスの 64 ビット ダンプまたは 32 ビット プロセスの 32 ビット ダンプがあることを確認してください。モジュールが表示される場合lm m wow64、それは「適切な」ダンプではありません。
  2. 少なくとも.symfix c:\symbolsのシンボルを設定します.reload
  3. 元の PC から .NET デバッグ ファイル (SOS.dll および mscordacwks.dll) を取得し、それに応じて名前を変更します。別の回答で詳細を参照してください。

    私のフリーウェア ツールである Mscordacwks Collectorが、名前の変更を含め、これを行います。

    その PC が使用できなくなった場合は、mscordacwks および SOS アーカイブでそれらのファイルを検索することをお勧めします。

    免責事項:それが十分に明確でない場合、私はそれらの著者です.

于 2015-09-04T20:19:29.130 に答える