windbg Symbol file path


SOS是一個調試器擴展,用於調試.NET應用程序。它提供了一組非常豐富的命令,這些命令使開發人員可以對CLR進行深入分析,並且有助於找出應用程序中各種復雜錯誤的原因。

 
由於SOS能夠提供CLR內部工作機制的抽象視圖,因此在使用SOS進行調試時,必須使用正確的版本。每個版本的.NET在發布時都帶有相應的SOS,可以在以下位置找到:
 
%windir%\Microsoft.NET\\\sos.dll
 
其中,“Architecture”的值可以是Framework(32位)或者Framework64(64位),而version的值則表示所使用的.NET框架版本。
 
在使用SOS之前,必須先通過.load命令將其加載到調試器中。如果加載的版本不對,會提示如下信息:
The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll) f
ailed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
 
 
在成功加載SOS之后,執行擴展命令!help,這個命令將顯示SOS中包含的一組命令。
 
接下來通過!Threads命令可以顯示出進程中的所有托管線程。如:
 
0:000> .load C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos.dll
0:000> !Threads
Failed to find runtime DLL (mscorwks.dll), 0x80004005
Extension commands need mscorwks.dll in order to have something to do.
0:000>
 
結果顯示一個錯誤信息,表示沒有找到mscorwks.dll。
 
當第一次加載.NET應用程序時,CLR將同時加載和初始化。負責實現運行時的庫是mscorwks.dll。SOS返回的錯誤信息表示當前進程不是一個.NET進程,或者當前還沒有加載運行時,因此這些調試器擴展命令不可用。
 
也可以不指定SOS的完整路徑,可以使用調試命令.loadby。 .loadby 。
 
“.loadby sos.dll mscorwks”表示從mscorwks.dll所在的目錄中加載SOS。
 
0:000> .loadby sos.dll mscorwks
Unable to find module 'mscorwks'
0:000>
 
如果遇到這個錯誤信息:“Unable to find module 'mscorwks'”,可以嘗試使用命令如下:
 
0:000>  sxe -c "" clrn
0:000>  g
 
執行完之后再嘗試使用“.loadby sos.dll mscorwks”,應該就正常了。
 
遇到如下錯誤信息,也可以嘗試先使用命令" sxe -c "" clrn"," g"來先加載運行時:
 
Failed to find runtime DLL (mscorwks.dll), 0x80004005
Extension commands need mscorwks.dll in order to have something to do.
 
使用!dumpdomain命令時出現如下錯誤信息:
 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
indows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll -
或者
0:000> !dumpdomain
PDB symbol for mscorwks.dll not loaded
 
需要先加載符號文件。
 
使用命令 !sym noisy 來開啟符號文件加載信息的詳細輸出。
 
0:000> !sym noisy
noisy mode - symbol prompts off
0:000> !sym - prompts
noisy mode - symbol prompts on
0:000>
 
通過如下命令可以成功加載符號文件:
 
0:000> .sympath srv*c:\symstore.pri*http://msdl.microsoft.com/download/symbols
 
使用 .reload /f 命令可以加載應用程序中用到的所有模塊。
 
加載完符號文件以及SOS擴展之后,使用!dumpdomain命令,如果還出現如下錯誤信息:
 
0:000>  !dumpdomain
--------------------------------------
System Domain: 0000000000000000
Unable to get system domain info
 
請嘗試關閉應用程序之后再打開調試器進行,應該之后會OK的。

我的一台Win2008R2(64位)安裝了VS2012和windbg32位版。
用VC2012編了個簡單的32位控制台程序ConsoleApplication1,並創建C:\MyLocalSymbols目錄,然后啟動windbg:

(1)設置File-->Symbol file path填入:
C:\MyLocalSymbols;SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols

(2)File-->Open executable打開ConsoleApplication1,
進入Windbg的窗口:

C/C++ code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
 
CommandLine:  "C:\Users\Administrator\Documents\Visual Studio 2012\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe"
Symbol search path is: C:\MyLocalSymbols;SRV*C:\MyLocalSymbols*http: //msdl.microsoft.com/download/symbols
Executable search path is: 
ModLoad: 00200000 00228000   ConsoleApplication1.exe
ModLoad: 77c40000 77dc0000   ntdll.dll
ModLoad: 75f90000 760a0000   C:\Windows\syswow64\kernel32.dll
ModLoad: 76160000 761a6000   C:\Windows\syswow64\KERNELBASE.dll
ModLoad: 0f660000 0f72b000   C:\Windows\SysWOW64\MSVCP110D.dll
ModLoad: 0f150000 0f2f1000   C:\Windows\SysWOW64\MSVCR110D.dll
(1e20.1e0c): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=cc7e0000 edx=002ae018 esi=fffffffe edi=00000000
eip=77ce0f3b esp=003af90c ebp=003af938 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
*** ERROR: Symbol file could not be found.  Defaulted to export symbols  for  ntdll.dll - 
ntdll!LdrVerifyImageMatchesChecksum+0x96c:
77ce0f3b cc               int      3
0:000> .sympath
Symbol search path is: C:\MyLocalSymbols;SRV*C:\MyLocalSymbols*http: //msdl.microsoft.com/download/symbols
Expanded Symbol search path is: c:\mylocalsymbols;srv*c:\mylocalsymbols*http: //msdl.microsoft.com/download/symbols


明明用.sympath已經看到我正確設置了符號文件路徑,而且C盤下面的MyLocalSymbols里面也有了不少東西,如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM