使用 xperf,我可以生成跟踪并获得所有文件的“平面”列表,如下所示:
xperf -on FileIO+FILE_IO+FILE_IO_INIT+FILENAME -stackwalk FileRead+FileWrite+FileDelete
xperf -start FileIOSession -heap -PidNewProcess "C:\Python27\x86\python.exe scratchy.py"-WaitForNewProcess -BufferSize 1024 -MinBuffers 128 -MaxBuffers 512 -stackwalk HeapAlloc+HeapRealloc -f ./tempheap.etl
xperf -stop FileIOSession -stop -d fileio.etl
xperf -i fileio.etl -o fio_output.txt -a 文件名
不幸的是,fio_output.txt 文件包含一个列表,列出了可以想象到的每个被访问过的文件(从我的网络浏览器、IDE 等)。更令人沮丧的是,如果我手动打开 xperfview 并打开文件 I/O 摘要表,我可以看到我的进程(在本例中为 python.exe)和它读取的一个文件(用于测试目的),但似乎无法找到一个在 CLI 上输出相同数据的方法,这正是我需要的——一种无人值守的自动生成文件访问信息的方法。
最佳答案
如果要查看此数据,则应将跟踪加载到 WPA 中,打开文件 I/O 表,并适本地排列列。由于您想要按进程分组,因此您应该首先拥有进程列,然后是橙色条,然后是您想要的任何数据列。
如果您想导出数据以编程方式解析它,那么您应该使用 WPT 8.1 中的新功能 wpaexporter.exe。请参阅我写的这篇描述如何执行此操作的博客文章: https://randomascii.wordpress.com/2013/11/04/exporting-arbitrary-data-from-xperf-etl-files/ 使用 wpaexporter 可以让您准确决定要导出哪些数据列,而不会受到 xperf.exe 为您提供的一组有限的跟踪处理操作的限制。
关于windows - 使用 xperf 列出每个进程访问的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547019/