简介
- 在《如何书写自定义的WPRP(Windows Performance Recorder Profile)文件》博文中我们介绍了如何通过书写自定义的配置文件来获取更大的控制权限。在本文中,我们将介绍如何通过
Xperf
这个工具来实现同样的操作。实际上WPR
底层就是基于Xperf
这个工具实现的。
Xperf查看支持的Kernel Flag
在《如何书写自定义的WPRP(Windows Performance Recorder Profile)文件》博文中,我们了解到SystemProvider
可以通过Keyword
字段来过滤掉事件类型,那么其实在Xperf
工具的命令行中也有类似的字段,这个字段被称为Kernel Flags
。我们可以通过如下命令查看支持的Kernel Flags
xperf -providers KF
注:本文中所有命令行的执行都要在管理员权限的cmd.exe中执行,否则会拒绝访问
Xperf查看堆栈开关选项
光是知道Kernel Flags
还不足以让我们完成对进程的调用栈追踪(call stack trace)
,我们还需要知道有哪几个堆栈开关可供我们选择,通过如下命令查看支持的堆栈开关
xperf -help stackwalk
Xperf开启事件追踪
如果要开启一次事件追踪,可以通过以下命令
xperf -on KF1+KF2+KF3
比如我们接下来想要开启一次调用栈的事件追踪会话,输入以下命令
xperf -on PROC_THREAD+LOADER+PROFILE -stackwalk profile
等待一定时间,直到当你认为记录的时间足够的时候,输入以下命令,结束会话并保存.etl文件
xperf -d test.etl
这个.etl文件
会保存在cmd.exe
当前的工作目录下,比如你当前的工作目录为C:\Windows\System32
,则.etl文件
的路径为C:\Windows\System32\test.etl
后记
其实以上只是一个Xperf
工具很小的一个应用,如果想要用做其它用途,只需要修改命令行中的参数即可。比如我们想要分析内存泄露,像下面这条命令便可以追踪内存中的堆分配
xperf -on Base -stackwalk HeapCreate+HeapAlloc
系统内存信息
- 有关如何内存泄露这里我的了解还不够深入,可能会误导大家,所以不对大家进行讲解,有兴趣可以自己下去研究,其实事件追踪的原理都是一样的,只是配置的参数不一样