加载符号
如果Symbol文件和对应的dll或exe在同一目录下,那么在调试的过程中,当dll或exe文件被加载的时候,对应的Symbol文件也会自动加载,所以一般情形下我们不需要设置Symbol路径。如果pdb文件和dll文件不再同一目录下,我们也可以手动的设置Symbol的路径。一般设置Symbol的方式有两种:
1. 通过菜单设置

注意:设置了Symbol路径需要重新加载,否则设置的Symbol路径无效。
Symbol路径的设置同样可以指定多个路径,多个路径通过分号(;)隔开

2. 通过命令设置:
0:004> .sympath d:\symbol Symbol search path is: d:\symbol Expanded Symbol search path is: d:\symbol
************* Symbol Path validation summary ************** Response Time (ms) Location OK d:\symbol 0:004> .reload Reloading current modules ........................ |
0:004> .sympath+ d:\symbol2 Symbol search path is: d:\symbol;d:\symbol2 Expanded Symbol search path is: d:\symbol;d:\symbol2
|
加载SOS
要想调试托管程序,调试器需要加载SOS或者SOSEX扩展程序。如果是分析Dump文件,还需要加载Dump文件mscordacwks。
SOS和SOSEX都是用来调试NET程序的扩展DLL,其中SOS包含在framework的安装目录下:
%windir%\microsoft.Net\<architecture>\<version>\sos.dll
SOSEX是Steve Johnson写的,这个dll的最新版本下载可以在该作者的网址上下载:
http://www.stevestechspot.com/
加载扩展dll的命令是:
0:004> .load c:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll |
加载了SOS之后还需要一个加载同文件夹下的CLR.dll,才能使用扩展命令。
在CLR 1.1和2.0的版本还不是使用CLR.dll,这个时候用的是mscorwks.dll。根据framework版本的不同,还有一个简单的加载方式:
Framework 1.0 & 2.0 & 3.0 & 3.5 | Framework 4.0 & 4.5 |
.loadby sos mscorwks | .loadby sos clr |
对于SOSEX的加载只能使用.load的方式,所以建议读者可以将SOSEX.dll下载到Windbg的安装目录下,这样便于加载SOSEX。
对于SOSEX的加载只能使用.load的方式,所以建议读者可以将SOSEX.dll下载到Windbg的安装目录下,这样便于加载SOSEX。
当调试从其他机器打出的dump文件的时候,SOS和mscordacwks版本的问题一直让人纠结,一般可以有三种解决方式:
a. 设置调试符号路径,并连接到Microsoft的公共Symbol server
b. 装一个与创建dump文件一样版本的framework
c. 从创建dump文件的机器上获取对应的SOS和mscordacwks
一般都是采用第三种方式,如果是客户创建的dump,在客户给我们dump的时候可以顺便要一下SOS和mscordacwks;第二种办法往往都不在正常人的考虑范围;至于第一种办法是在获取不到对应的SOS和mscordacwks的时候采取的办法,这个办法唯一的缺点就是从Microsoft Symbol Server上下载对应的Symbol太慢。
值得注意的是,通过启动程序建立的调试会话在第一次中断的时候还没有加载CLR或MSCORWKS,这个时候是无法通过loadby找到对应的CLR或MSCORWKS模块,通过命令g继续执行等加载了CLR或MSCORWKS模块就可以使
.Loadby
0:000> .loadby sos clr Unable to find module 'clr' 0:000> g ModLoad: 762c0000 76360000 C:\Windows\syswow64\ADVAPI32.dll ModLoad: 74d40000 74dec000 C:\Windows\syswow64\msvcrt.dll ModLoad: 763f0000 76409000 C:\Windows\SysWOW64\sechost.dll ModLoad: 753f0000 754e0000 C:\Windows\syswow64\RPCRT4.dll ModLoad: 74ce0000 74d40000 C:\Windows\syswow64\SspiCli.dll ModLoad: 74cd0000 74cdc000 C:\Windows\syswow64\CRYPTBASE.dll ModLoad: 6ff80000 6fffa000 C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll ModLoad: 74ee0000 74f37000 C:\Windows\syswow64\SHLWAPI.dll ModLoad: 76360000 763f0000 C:\Windows\syswow64\GDI32.dll ModLoad: 751a0000 752a0000 C:\Windows\syswow64\USER32.dll ModLoad: 74fc0000 74fca000 C:\Windows\syswow64\LPK.dll ModLoad: 750f0000 7518d000 C:\Windows\syswow64\USP10.dll ModLoad: 74e80000 74ee0000 C:\Windows\SysWOW64\IMM32.DLL ModLoad: 754e0000 755ac000 C:\Windows\syswow64\MSCTF.dll ModLoad: 6eec0000 6f552000 C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll ModLoad: 6ede0000 6eeb3000 C:\Windows\SysWOW64\MSVCR110_CLR0400.dll (c7c.b58): Unknown exception - code 04242420 (first chance) ModLoad: 6de20000 6eddf000 C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\51e2934144ba15628ba5a31be2dae7dc\mscorlib.ni.dll ModLoad: 76be0000 76d3c000 C:\Windows\syswow64\ole32.dll ModLoad: 6d430000 6d49e000 C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll (c7c.508): Break instruction exception - code 80000003 (first chance) *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\syswow64\KERNEL32.dll - eax=7ef9c000 ebx=00000000 ecx=00000000 edx=7721f7ea esi=00000000 edi=00000000 eip=7719000c esp=04a5ff0c ebp=04a5ff38 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!DbgBreakPoint: 7719000c cc int 3 0:004> .loadby sos clr |