WinDbg基础(1)

来源:互联网 发布:游戏竞猜网站源码 编辑:程序博客网 时间:2024/06/01 07:11

加载符号

如果Symbol文件和对应的dllexe在同一目录下,那么在调试的过程中,当dllexe文件被加载的时候,对应的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.12.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文件的时候,SOSmscordacwks版本的问题一直让人纠结,一般可以有三种解决方式:

a. 设置调试符号路径,并连接到Microsoft的公共Symbol server

b. 装一个与创建dump文件一样版本的framework

c. 从创建dump文件的机器上获取对应的SOSmscordacwks

一般都是采用第三种方式,如果是客户创建的dump,在客户给我们dump的时候可以顺便要一下SOSmscordacwks;第二种办法往往都不在正常人的考虑范围;至于第一种办法是在获取不到对应的SOSmscordacwks的时候采取的办法,这个办法唯一的缺点就是从Microsoft Symbol Server上下载对应的Symbol太慢。

值得注意的是,通过启动程序建立的调试会话在第一次中断的时候还没有加载CLRMSCORWKS,这个时候是无法通过loadby找到对应的CLRMSCORWKS模块,通过命令g继续执行等加载了CLRMSCORWKS模块就可以使

.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



原创粉丝点击