微点交流论坛
» 游客:  注册 | 登录 | 帮助

 

作者:
标题: [MPer] 蓝屏自动内存转储设置及一些使用手记
点饭的百度空间
银牌会员




积分 2315
发帖 2236
注册 2007-11-30
#1  [MPer] 蓝屏自动内存转储设置及一些使用手记

2010-03-19

    公司推出64位版本的程序了,放出去小范围内测。既然是内测版的,必然不稳定。经常有参与测试的用户反应说蓝屏的,既然蓝屏了就要分析。可惜驱动组人手不足,就把蓝屏信息交给我们样本组先滤一遍,把肯定与我们公司产品无关的蓝屏信息滤出去。

    既然来活了,就开始研究。我就是个小实习生,本来会的也不多。不过现在样本组也就我这个做误报排除的还比较闲,那我理所当然应该多研究研究了。好,废话不多说,先把今天学来的东西汇总一下,方便日后查阅复习。

一、蓝屏后自动内存转储设置

    蓝屏了不是崩溃了,而是Windows系统的一个自我保护。此时Windows系统会把一切的运行终止掉,然后把内存中的一切信息转储到硬盘中,生成一个扩展名为DMP的dump文件。便于技术人员分析蓝屏原因。但默认情况下是不生成这个dump文件的,想要在蓝屏的时候生成这么一个文件以便分析,那就要设置一下。

    在桌面上右键单击我的电脑,选择属性。然后点击高级标签栏,点击下面的“启动和故障恢复”框中的设置。设置中的“写入调试信息”有四个选项:(无);小内存转储(64K);核心内存转储;完全内存转储。



可能有教程说选择“小内存转储(64K)”就行,但实际上64k的文件时存储不了什么有价值信息的……64k的信息是发给微软那帮技术看的…… 如果有心抓取蓝屏后的dump文件留给自己或者相关技术人员分析的话,那“小内存转储(64K)”是不管用的。如果硬盘空间不富裕的话,可以选择“核心内存转储”,抓取的dump文件大约是物理内存大小的三分之一左右。如果硬盘空间富裕的话,那就大大方方的选择“完全内存转储”吧,抓取的dump文件等同于你的物理内存。这些文件才是有分析价值的。

二、手动制造蓝屏

    上面简单的提了一下蓝屏后生成的内存转储文件,也就是说蓝屏对于分析软件错误是有帮助的,它是Windows系统提交给我们的一个内核异常报告,加以分析就能便于我们改进自己的程序。

    但有时候程序异常不会造成蓝屏,而是死机……死机可是不会提供给我们什么有价值的信息的,我们也无法再死机的时候调试异常(WinDBG双机互调那个另说……)。那怎么办呢?我们就必须手动制造一个蓝屏,好让Windows为我们抓取内存信息。

    我没说梦话,微软给我们提供了这样的功能,用你的键盘就能实现。

    首先要确认你的键盘和主机的连接口的类型,确认一下是USB接口还是PS/2接口(PS/2即我们俗称的“圆口”。笔记本键盘算是什么接口我不甚了解……据网友allanpk716友情提示说可能属于PS/2接口),然后根据键盘接口类型选择要设置的注册表键值。

    USB接口键盘找到如下注册表路径:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters

    PS/2接口键盘找到如下注册表路径:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

    在对应路径下新建一个DWORD项,命名为“CrashOnCtrlScroll”,值为1.

    设置好后重启电脑即可生效。一旦出现死机,并且你认为需要存储此刻的内存数据以便分析的话,就按住右Ctrl键,同时连按两下Scroll Lock键。OK,蓝屏了。我们要的DMP文件存下来了!

三、查阅DMP文件的一些简单命令

    分析DMP文件需要用到WinDBG,命令是必须要掌握的。我也不是很懂,就把最基础的几个命令记录下来以便日后查阅:

•分析DMP文件:!analyze -v
•进程列表:!process 0 0
•线程列表:!list tread
•栈信息:kv
四、WinDBG与VMware对接调试
    这跟蓝屏分析没啥关系,就是用到WinDBG了,就找了些其他的相关教程,对于与VMware对接这个觉得比较好玩,就跟着教程调试了一下,把对接方法记录如下:

1.设置 VMware 的虚拟com
1.运行 VMware ,点击 "Edit virtual machine settings"
2.点击 "Add..." 来运行 VMware 的 Hardware Wizard
3.1.3 选择 "Serial Port",点 "下一步"
4.选择 "Output to named pipe",点 "下一步"
5.第一框里保持默认的 "\\.\pipe\com_1"
第二框里选"This end is the server."
第三框里选"The other end is an application."
选中 "Connect at power on"
然后点击 "Advanced>>"(有的版本可能没有这个选项,不要紧,直接点完成再选也行)
6.选中 "Yield CPU on poll"(VMware Support 中提到了这一点),然后点完成。
2.设置 VMware 虚拟出来的 guest os,现在 power on 虚拟出来的 guest os
1.设置boot.ini(不同的OS具体参数略有不同,但不会有大的差别,领会领会精神即可)

在c:\下,可以找到boot.ini,可以用记事本打开它。我们需要在 guest os 的启动项上加些参数,才能够使用WinDbg调试它。我们可以在现有的行后面直接加参数,不过强烈推荐复制一个新行,在新行的后面加参数。这样在调试启动有问题的时候,我们可以方便的换回原来的启动方式。下面就是我改好的boot.ini。
其中 " multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows2000 Professional" /fastdetect "
是原来的行。
" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200 " 是我新加的将来用于 WinDbg 调试的行。

------------------------------------------------------------------------------------------

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200

-------------------------------------------------------------------------------------------

这里还要注意的是,timeout不要为0,否则直接启动默认的项。新行后面加上了参数 /debug /debugport=com1 /baudrate=115200 ,可以看到 debugport=com1 ,baudrate=115200 。参数的具体作用,可以参考 WinDbg 的帮助文件。

2.设置com1端口的速度
在 guest os 的设备管理器中把com1端口的速度也就是"每秒位数"项,设为和上面一样的115200。

3.设置 WinDbg

我们需要告诉WinDbg通过pipe进行连接和连接的速度。可以在命令提示符(cmd.exe)下加参数
-k com:port=\\.\pipe\com_1,baud=11520,pipe 运行WinDbg(VMware Support 中没有提到 baud=11520 这个参数,其实这是个比较重要的参数)。 更方便的方法是在桌面建立一个WinDbg的快捷方式,在该快捷方式的属性,"目标"框中,加上参数 -k com:port=\\.\pipe\com_1,baud=11520,pipe 。这样运行这个快捷方式启动的WinDbg就完成了设置。参数的具体作用,可以参考 WinDbg 的帮助文件。
4.推荐的操作顺序(经实践对原参考教程略作修改)
1.首先运行 VMware ,启动 Guest OS ,到系统启动选择,选择 "Microsoft Windows 2000 Professional - debug" 项,按回车进入。
2.通过刚才设置好的快捷方式运行WinDbg。
3.稍等片刻,就连接上了。如果很长时间没有连接上的话,可以按 WinDbg 菜单中的 "Debug"->"Kernel Connection"->"Resynchronize"。
4.最后按 WinDbg 菜单中的 "Debug"->"Break" ,你就可以向 WinDbg 下命令了。
5.其他
1.VMware Support 中还提到了可以通过修改虚拟机的配置文件来改变虚拟串口的速度,有兴趣的话可以参考 VMware Support 中的方法。
2.WinDbg 的菜单项 "View"->"Show Version" 可以看到一些相关信息。

参考:
http://hi.baidu.com/dayday23/blo ... 3f2e0a0cf3e3d5.html
http://www.qqread.com/sys-soft/h210992.html

[ Last edited by 点饭的百度空间 on 2010-8-31 at 10:18 ]

※ ※ ※ 本文纯属【点饭的百度空间】个人意见,与【 微点交流论坛 】立场无关※ ※ ※

你的微笑 is 微点的骄傲!
http://hi.baidu.com/new/micropoint
2010-8-31 10:15
查看资料  发送邮件  访问主页  发短消息   编辑帖子
littlefritz
版主

微点帮帮团团长


积分 3505
发帖 3502
注册 2009-5-23
来自 微点帮帮团
#2  

很详细

※ ※ ※ 本文纯属【littlefritz】个人意见,与【 微点交流论坛 】立场无关※ ※ ※

2010-8-31 18:06
查看资料  发送邮件  访问主页  发短消息  QQ   编辑帖子



论坛跳转:

可打印版本 | 推荐 | 订阅 | 收藏


[ 联系我们 - 东方微点 ]


北京东方微点信息技术有限责任公司 福建东方微点信息安全有限责任公司

闽ICP备05030815号