如何安装WinDbg并得到第一个dump文件 How-to-install-Windbg-and-get-your-first-memory-dump

 

如何安装WinDbg并得到第一个dump文件

WinDbg 是一个为asp.net 支持工程师准备的免费的工具,可以在:

www.microsoft.com/whdc/devtools/debugging/default.mspx 这里下载得到。这个东西的学习过程是非常曲折的。但如果你有兴趣来找出你的应用程序中到底是怎么运行的,那么WinDbg是你最好的朋友。如何配置WinDbg,请查看文档,特别是涉及到Symbols 的地方。

另外还有一个扩展叫“SOS.dll ”你会在 .net 2.0 的目录中发现它的。

C:\Windows\Microsoft.NET\Framework\v2.0.50727你可以把它拷贝到WinDbg的目录,这样方便使用。 .net 3.0 .net 3.5 的目录里面你会找不到这个东西,其实,他们使用的,还是.net2.0中的那个SOS.dll 这个文件。

得到一个dump文件

WinDbg允许你在机器已经出现死亡问题时的内存分析,也支持你附加到执行中的进程来进行分析。我主要处理内存dump文件。向客户要一个dump文件比访问他们的服务器要来得简单的多。也许以后我会写一些活动进程调试的文章,但这里我们仅仅看dump文件。

Vista

如果你运行Vista系统,那你创建一个dump文件是很简单的。在任务管理器中,切换到“进程”选项卡,右键点击你想要创建dump文件的进程,然后选择“创建dump文件”。

Adplus

对于其他系统,或其他特定的条件,我推荐你使用AdPlus的脚本。它会和WinDbg一起安装,从命令提示符中运行。它有几个参数,但最基本的是有两个你必须指定。

1)  什么时候创建dump

2)  dump的进程ID编号。

adplus创建的dump文件会被默认保存在WinDbg安装的目录的子文件夹下。

例如:

adplus –crash –pn w3wp.exe

 

下面的命令会创建一个完全的内存dump文件,当任何名叫w3wp.exe终止或被回收的时候。

这个也会创建一个最小化的dump文件,当第一次出现异常的时候。

adplus -crash -pn w3wp.exe -NoDumpOnFirst

和上面一样,只是没有最小化dump文件

adplus -hang -p 2960

这个会立刻创建一个进程ID2960号的完全的dump文件,通常在进程出现挂起的时候,或是没有反应的时候,意义和它的参数一样。

高级Adplus

如果你正在努力的找出异常的原因,你可以使用一个配置文件,下面是一个示例文件,当System.Runtime.InteropServices.COMException异常发生的时候,它将会创建一个完全的内存dump文件,请拷贝下面的内从到记事本中保存为MyConfig.cfg

<ADPlus>

 <Settings>

  <RunMode> CRASH </RunMode>

 </Settings>  <PreCommands>

  <Cmd> !load clr10\sos</Cmd>

 </PreCommands>  <Exceptions>

  <Option> NoDumpOnFirstChance </Option>

  <Option> NoDumpOnSecondChance </Option>

  <Config>

   <!-- This is for the CLR exception -->

   <Code> clr </Code>

   <Actions1> Log </Actions1>

   <CustomActions1>

 !clr10\sos.cce System.Runtime.InteropServices.COMException 1; j ($t1 = 1) '.dump /ma /u c:\dumps\exceptiondump.dmp;gn' ; 'gn'

 </CustomActions1>

   <ReturnAction1> GN </ReturnAction1>

   <Actions2> Void </Actions2>

   <ReturnAction2> GN </ReturnAction2>

  </Config>

 </Exceptions>

</ADPlus>

你可以非常简单的调整配置文件来取得任何异常的的dump文件。这个dump文件会保存在c:\dumps,你应该先确保这个文件夹的存在,当你准备好的时候,运行下面的命令

adplus -c myconfig.cfg -pn w3wp.exe

通过终端会话来调试

如果你不能直接去访问服务器,你需要间接或其他方式来运行命令。这看起来有点困难的。但在微软的知识库中有一个很好的文章介绍了这个,请看:

http://support.microsoft.com/default.aspx/kb/323478

 

posted @ 2008-01-28 14:17  softfair  阅读(3999)  评论(2编辑  收藏  举报