zoukankan      html  css  js  c++  java
  • 各种dump方法

    dump的方法很多,各有特点,都应该掌握。

    dump分为两种:用户进程dump、系统dump。先说用户进程的dump。
    • 最简单的是在Win7的任务管理器中右键点击进程,选择Create Dump File。完成之后会弹出对话框说明dump文件的位置。这对于死锁进程的调试有帮助。
    • 用WinDbg也很方便。WinDbg是绿色版,直接拷贝整个目录即可使用。可以Attach到任意的进程中,然后用命令.dump xxx.dmp即可。
    • WinDbg提供了一个方便的脚本,可以直接取运行中进程的dump,完成后自动detach,尽量减少对运行中进程的影响,方便分析CPU占用过高、死锁等问题:
    adplus.vbs -hang -p 1234 -o d:\dump
    另外几个用法:
    adplus -crash -pn w3wp -quiet 抓w3wp进程,crash模式,当那个进程崩溃结束的时候自动抓取当时的内存

    adplus -hang -iis -quiet 抓IIS相关进程,包括其上host的web应用,以及iis自身

    • WinDbg本身也是查看分析dump文件的最常见工具,直接打开dump文件即可。分析dump的常用命令:
    !analyze -v 显示所有分析所需的常用信息。
    k/kb 显示调用堆栈。
    .ecxr 显示当前执行状态。

    .lastevent 查看上一个事件(异常也是事件的一种)

    • 执行WinDbg.exe -I会把WinDbg安装成默认的异常处理程序。如果某个程序崩溃,则自动调用WinDbg进入调试状态。这时候可以方便的取dump。
    • 如果安装了VS2005、VS2008,也可以作为默认的debugger,在Option里面可以设置。进程崩溃启动VS后,可以从菜单中选取dump功能。

    以上都是用户进程的dump方法,下面介绍系统dump(摘抄):
    • Dump文件有三种:完整内存转储,内核内存转储,小内存转储。System Properties中的高级选项中可以看到这些设置。
    完整内存转储太大,一般是物理内存大小或多一些,包括了用户进程页面,这种方式不实用,2GB的物理内存转储出来至少要2GB的磁盘空间(还有文件头信息)。内核转储一般是200MB大小(物理内存小于4GB),它只是包含了所有属于内核模式的物理内存。小内存转储一般是64KB(64位上是 128KB),这两种方式是更常用的。
    小内存转储在\Windows\Minidump下生成了一个叫Mini日期+序列号.dmp的文件,这个珍贵的资源就是系统Crash时刻的状态,只不过小内存转储只记录的有限的信息,而且在你分析时,如果windbg没有设置符号服务器的路径(关于符号服务器,请参考Windbg内核调试之二: 常用命令),那么你的当前系统必须和发生蓝屏的系统的Ntoskrnl.exe版本相同,否则就有找不到符号的问题产生。

    • 如果系统死锁了,而不是BSOD,可以设置快捷键抓取系统dump,按住Ctrl+ScrollLock+ScrollLock。导入如下注册表即可:
    Windows Registry Editor Version 5.00
    ;For PS/2 keyboards:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
    "CrashOnCtrlScroll"=dword:00000001
    ;For USB keyboards:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters]
    "CrashOnCtrlScroll"=dword:00000001
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
    "AutoReboot"=dword:00000000
    "CrashDumpEnabled"=dword:00000001
    "Overwrite"=dword:00000001

    "LogEvent"=dword:00000001

    如果发生了键盘没有ScrollLock的杯具,可以改变快捷键:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\crashdump]
    Dump1Keys=0x22
    Dump2Key=0x7e
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\crashdump]
    ;Rightmost CTRL key + Leftmost CTRL key
    Dump1Keys=0x22
    ;use pause/break key
    Dump2Key=0x7e
    设置:
    参考文档:
    http://msdn.microsoft.com/en-us/library/cc266483.aspx
    http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
  • 相关阅读:
    ASP.NET MVC布局
    C#微信扫码支付Demo
    ASP.NET MVC用户登录(Memcache存储用户登录信息)
    Memcached分布式缓存快速入门
    Log4Net日志配置
    ASP.NET MVC自定义异常处理
    Spring.Net快速入门:控制翻转、依赖注入、面向切面编程
    C#微信公众号开发入门教程
    APS.NET MVC4生成解析二维码简单Demo
    Entity Framwork学习笔记
  • 原文地址:https://www.cnblogs.com/tinyfish/p/1616612.html
Copyright © 2011-2022 走看看