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
  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/tinyfish/p/1616612.html
Copyright © 2011-2022 走看看