Windows平台下的命令行工具,可以在指定的条件下生成dump文件。
应用场景:主要用于高CPU占用率的性能分析优化,程序停止响应的调试,First chance异常捕获等,还可以监视内存使用、结合系统性能计数器使用,更详细介绍见https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
这里只记录一下常用用法。
在命令提示符下procdump -?可以查看全部参数的说明,这里列举几个常用的:
-c/-cl: 监视CPU占用率阀值,-c为当CPU占用率高于该值时创建dump,-cl则在低于该值时创建dump。
-u: 监视单核心的CPU占用率,与-c一起使用
-s: 时间,以秒为单位,结合-c使用实现当连续N秒CPU占用高于某值时保存dump。
-n: 设置数量,保存多个dump后才退出该程序。
-h: 当进程中存在挂起窗口(不响应窗口消息)时创建dump。
举例:
现在就写个测试程序,故意引发一下程序停止响应,看一下怎么用procdump跟踪这个问题。创建一个MFC Dialog程序,在OK按钮的事件里面写一个死循环:
void CProcdump_testDlg::OnBnClickedOK()
{
// TODO: Add your control notification handler code here
while(1);
CDialogEx::OnOK();
}
运行一下程序,在任务管理器里看一下PID,14204
打开命令提示符,用之前介绍的-h参数,在有窗口挂起时保存dump:
C:\Users\test\Desktop>procdump 14204 -h
点一下OK按钮,触发死循环,这时可以在命令提示符窗口看到procdump提示我们已经创建了dump:
[12:01:05] Hung Window:
[12:01:05] Dump 1 initiated: C:\Users\test\Desktop\procdump_test.exe_180820_120105.dmp
[12:01:05] Dump 1 complete: 1 MB written in 0.0 seconds
[12:01:06] Dump count reached.
可以用VS或者Windbg分析生成的dump,这里用VS打开dump可以看到程序就停在导致停止响应的地方:
网友评论