zoukankan      html  css  js  c++  java
  • 【转】Windows Dump文件获取

     dump文件是进程的内存镜像。可以把程序的执行状态,即当时程序内存空间数据通过调试器保存到dump文件中。

    1、利用WinDbg里的adplus来获取dump文件

    Adplus.vbs 是一个Visual Basic Script 文件,Adplus 主要用来生成内存转储文件 (dump file),内存转储文件适用于不能实时调试的情况下。在WinDbg安装目录里可以找到adplus.vbs,使用adplus.vbs生成dump文件,

    adplus -hang -o d:dump -p 1234

    其中hang表示附加到进程,如果是crash,则为目标进程崩溃的时候抓取,-o后面的参数表示dump文件存到位置,-p后面的数字为进程的PID,也可以是-pn后面跟进程名称,如:adplus.vbs -hang -pn ConsoleWindbg.exe -o D:dump

    2、使用Debug Diagnostic Tool(DebugDiag)工具获取dump文件

    下载Debug Diagnostic Tool然后进行安装,打开该工具,Debug Diagnostic Tool可以选择不同的规则来进行dump文件。可以根据程序崩溃时捕获dump文件,也可以根据性能指标来进行捕获,如CPU过高,死锁,HTTP响应时间过程等参数。如下图:

    也可以找到对应的进程,通过如下方法进行捕获。此种方式获取的dump文件放到C:Program FilesDebugDiagLogsMisc下。

    3、使用.dump命令

    1) 打开WinDBG—>File—>Attach to a Process,然后选择将之要进行捕获的进程。如我们这里要对ConsoleWindbg.exe进程产生dump文件。选择后如图:

    2)在上图红色区域的输入框内输入产生dump 文件的命令 .dump 。可以选择不同的参数来生成不同类型的dump文件。

    选项(1): /m

    命令行示例.dump /m D:/dump/myapp.dmp

    注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。

    选项(2): /ma

    命令行示例.dump /ma D:/dump/myapp.dmp

    注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中dump。

     选项(3):/mFhutwd

    命令行示例.dump /mFhutwd D:/dump/myapp.dmp

    注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案。

    4、使用ProcDump工具

    Procdump是一个轻量级的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原因。你还可以把它作为生成dump的工具使用在其他的脚本中。有了它, 就完全不需要在同一台服务器上使用诸如32位系统上的Debug Diag 1.1或是64位系统上的ADPlus了。

    Procdump下载:http://technet.microsoft.com/en-us/sysinternals/dd996900

    procdump -ma -c 50% -s 3 -n 2 5844 (Process Name or PID) -o c:dumpfile

    -ma 生成full dump, 即包括进程的所有内存. 默认的dump格式包括线程和句柄信息。

    -c 在CPU使用率到达这个阀值的时候, 生成dump文件。

    -s CPU阀值必须持续多少秒才抓取dump文件。

    -n 在该工具退出之前要抓取多少个dump文件。

    -o dump文件保存目录。

  • 相关阅读:
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 24 两两交换链表中的节点
    Java实现 LeetCode 24 两两交换链表中的节点
    Java实现 LeetCode 24 两两交换链表中的节点
  • 原文地址:https://www.cnblogs.com/MakeView660/p/7845009.html
Copyright © 2011-2022 走看看