2015-09-04 55 views
3

我正在做一些崩潰轉儲調試,我正在查看從生產服務器獲取的轉儲。運行WinDbg的機器必須安裝一個稍微不同的.NET運行時版本 - 我收到加載.NET系統程序集的本機映像的錯誤(因此無法加載,例如System.Data.Linq)。爲Windbg獲取正確的.net本機符號

確保我的調試機器可以訪問所有正確符號的最佳方法是什麼?

編輯 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 
+0

我假設你問這個問題,因爲使用官方符號服務器(在msdl.microsoft.com/download/symbols)不能正常工作? –

+0

我從官方標誌網站拉 - 無喜歡 – JMarsch

+0

什麼版本的System.Data.Linq受到影響?你可以發佈該模塊的'lmv'輸出嗎? –

回答

1

您可以WINDBG通過運行以下命令從Microsoft下載服務器的官方標誌:

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

這將存儲從本地緩存中的服務器下載的符號C:\Symbols,然後強制重載所有當前加載的模塊的符號。

+0

'.symfix c:\ symbols'是簡寫 –

2

有一些事情要考慮.NET:

  1. 請確保您有一個good dump for .NET,即64個進程或32個進程的32位轉儲的64位轉儲。如果lm m wow64顯示一個模塊,它不是一個「好」轉儲。
  2. Set up the symbols,至少.symfix c:\symbols.reload
  3. 獲取從原來的PC的.NET調試文件(SOS.dll和mscordacwks.dll),並將其重命名相應。請參閱details in another answer

    我的免費軟件工具Mscordacwks Collector將爲您做到這一點,包括重命名。

    如果PC不再可用,您可能要搜索我mscordacwks and SOS archive

    免責聲明這些文件:我是那些的​​作者,如果這還不夠清楚。

4

在名稱中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 

現在由C添加PDBS:\符號Windbgs符號路徑。

+0

看來他已經有PDB了。另外,之後創建PDB是否添加了比DLL本身更多的信息? –

+0

我也想知道這是否很常見。如果這經常需要,我會添加這樣的功能到我的工具mscordacwks收藏家。 –

+0

@ThomasWeller ETW跟蹤我們還需要NI PDB(WPRUI.exe在將ETL文件寫入磁盤時生成它們)來顯示堆棧。所以也許Windbg也需要這個PDB。 ** ngen /?**表明我們必須添加/調試到命令行才能生成應該用於調試的PDB。 – magicandre1981