当前位置:   article > 正文

01-windows调试工具(ProcDump使用)

procdump
  • 工具msdn下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump
  • csdn的下载地址:windows调试工具-C++文档类资源-CSDN下载
  • ProcDump简介:
    • 详细的使用说明参考:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump
    • ProcDump 是一个命令行实用工具,其主要用途是监视应用程序的 CPU 峰值,并在出现峰值期间生成故障转储。
    • ProcDump 还包括挂起窗口监视 (使用 Windows 和任务管理器使用) 、未经处理的异常监视的窗口挂起定义,并且可以基于系统性能计数器的值生成转储。 
    • 监视指定的进程到程序异常的时候,生成DMP文件
    • 进程的运行期间生成DMP文件
  • ProcDump的转储类型:
  • -mm写入“Mini”转储文件。 (默认值)
    - 包括直接或间接引用的内存 (堆栈及其) 引用的内容。
    - 包括 (进程、线程、模块、句柄、地址空间等) 的所有元数据。
    -ma写入“完整”转储文件。
    - 包括所有内存 (映像、映射和专用) 。
    - 包括 (进程、线程、模块、句柄、地址空间等) 的所有元数据。
    -mt写入“会审”转储文件。
    - 包括直接引用的内存 (堆栈) 。
    - 包括有限的元数据 (进程、线程、模块和句柄) 。
    - 尝试删除敏感信息,但不能保证。
    -mp编写“MiniPlus”转储文件。
    - 包括所有专用内存和所有读/写映像或映射内存。
    - 包括 (进程、线程、模块、句柄、地址空间等) 的所有元数据。
    - 为了最小化大小,将排除超过 512MB 的最大专用内存区域。
      内存区域定义为相同大小的内存分配的总和。
      转储与完整转储一样详细,但大小为 10%-75%。
    - 注意:由于调试限制,CLR 进程将转储为 Full (-ma) 
    -mc写入“自定义”转储文件。
    - 包括由指定的 MINIDUMP_TYPE 掩码 (十六进制) 定义的内存和元数据
    -md编写“回调”转储文件。
    - 包括由 MiniDumpWriteDump 指定 DLL 命名 MiniDumpCallbackRoutine 的回调例程定义的内存。
    - 包括 (进程、线程、模块、句柄、地址空间等) 的所有元数据。
    -mk此外,还要编写“内核”转储文件。
    - 包括进程中线程的内核堆栈。
    - 使用克隆 () -mk 时,OS 不支持内核转储 (-r) 。
    - 使用多个转储大小时,将针对每个转储大小进行内核转储
  • 条件说明:

  • 条件说明
    -a避免中断。 需要 -r。 如果触发器会导致目标由于超出并发转储限制而长时间挂起,则将跳过该触发器。
    -at避免超时时中断。 在几秒钟内 N 取消触发器的收集。
    -b将调试断点视为异常, () 忽略它们。
    -cCPU 阈值高于该阈值,用于创建进程的转储。
    -clCPU 阈值低于该阈值,用于创建进程的转储。
    -dc将指定的字符串添加到生成的转储注释。
    -e当进程遇到未经处理的异常时写入转储。
    包括 以 1 在出现第一次机会异常时创建转储。
    添加 -ld 以在加载 DLL (模块) 时创建转储, (筛选) 应用。
    添加 -ud 以在卸载 DLL (模块) 时创建转储, (筛选) 应用。
    添加 -ct 以在创建线程时创建转储。
    添加 -et 以在线程退出时创建转储。
    -f筛选器 (包括) 异常内容、调试日志记录和 DLL 加载/卸载时的文件名。 支持通配符 (*) 。
    -fx筛选器 (DLL 加载/卸载时排除异常内容、调试日志记录和文件名的) 。 支持通配符 (*) 。
    -g在托管进程中作为本机调试器运行, (无互操作) 。
    -h如果进程有一个挂起的窗口, (至少 5 秒) 不响应窗口消息,则写入转储。
    -k克隆 (-r) 后或在转储收集结束时终止进程。
    -l显示进程的调试日志记录。
    -m创建转储的内存提交阈值(以 MB 为单位)。
    -ml当内存提交低于指定的 MB 值时触发。
    -n退出前要写入的转储数。
    -o覆盖现有转储文件。
    -p当性能计数器达到或超过指定的阈值时触发。 某些计数器和/或实例名称可能区分大小写。
    -pl当性能计数器低于指定的阈值时触发。
    -r使用克隆进行转储。 并发限制是可选的, (默认为 1,最大为 5) 。 使用克隆 () -mk 时,OS 不支持内核转储 (-r) 。 警告: 高并发值可能会影响系统性能。
    - Windows 7:使用反射。 OS 不支持 -e
    - Windows 8.0:使用反射。 OS 不支持 -e
    - Windows 8.1+:使用 PSS。 支持所有触发器类型。
    -s写入转储前的连续秒 (默认值为 10) 。
    -t进程终止时写入转储。
    -uTreat CPU usage relative to a single core (used with -c).
    -v仅调试: 详细输出。
    -w如果指定的进程未运行,请等待启动。
    -wer将 (最大的) 转储排队到Windows 错误报告。
    -x使用可选参数启动指定的映像。 如果是应用商店应用程序或包,ProcDump 将在下次激活 (仅) 启动。
    -y隐藏: 应用商店应用程序激活。
    -64默认情况下,在 64 位 Windows 上运行时,ProcDump 将捕获 32 位进程的 32 位转储。 此选项替代以创建 64 位转储。 仅用于 WOW64 子系统调试。
  • Procdump的异常DMP文件生成
    • 32位系统打开procdump.exe,64位系统则打开procdump64.exe
    • 指定某一个进程,立即生成一个dump文件,如果进程不存在,等待进程启动
    • procdump64.exe  -w   进程名称   (进程启动后立马生成dmp文件)
    • procdump64.exe  -e  -w   进程名称   (进程异常后立马生成dmp文件)

    • procdump  -ma   4778(直接生成进程号为4778的Full Dump)
    • procdump64.exe  -ma  -t  进程ID(指定的进程异常后生成一个全dmp文件)
  • ProcDump高CPU的DMP文件生成
    • 当系统 CPU 使用率持续 5 秒超过 70% 时,连续抓 3 个 Full Dump
      • procdump -c 70 -s 5 -ma -n 3  进程名称/进程ID
    • 当系统 CPU 使用率超过 80%,抓取test.exe 进程的 Mini Dump。
      • procdump test  -p "\Processor(_Total)\% Processor Time" 80
    • 当test.exe的句柄数超过1000时,抓取dmp文件
      • procdump -ma test -p "\Process(test)\Handle Count" 10000
  • windbg分析:
    • 将生成的dmp文件,使用windbg工具进行分析
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/483809
推荐阅读
相关标签
  

闽ICP备14008679号