如何安装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.
得到一个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 |
这个会立刻创建一个进程ID是2960号的完全的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