我正在使用win 10 sdk中的poolmon来分析内存泄漏,我正在卸载驱动程序之后运行它。我的命令行是

poolmon.exe -s -e -g -r -n poolmondump.txt

poolmon /?中的参数定义
-s                  Display session pool
-n [Logfile]        Take a pool snapshot
                    Logfile maybe specified, default is poolsnap.log
-g [PoolTagFile]    Display driver information using PoolTagFile
                    If PoolTagFile is not specified
                    use 'pooltag.txt' from current directory
-e                  Display totals
-r                  Print memory summary information

一个输出是
 Tag  Type     Allocs         Frees    Diff   Bytes    Per Alloc    Mapped_Driver
  SIFP Paged 245366784   2359304  243007480      -1         17       [MyDriver.sys]
  SIFP Nonp          7         7         0       -1         -1       [MyDriver.sys]

有时出现负Diff
 Tag  Type     Allocs         Frees    Diff   Bytes    Per Alloc    Mapped_Driver
 NweN Paged    529879   4784171  -4254292      -1          1        [MyDriver.sys]
 PBDN Paged        43        66       -23       1          0        [MyDriver.sys]

如何理解这一点?怎么处理?
我试着重新命名标签,但每天都有新的东西。
这仅在测试设置中使用的一个虚拟机上发生。

最佳答案

PoolMan驱动程序存在于windows中,它:
显示操作系统收集的有关内存的数据
来自系统分页和非分页内核池的分配,以及
用于终端服务会话的内存池。数据被分组
按池分配标记。
驱动程序开发人员和测试人员经常使用poolmon来检测内存泄漏
当他们创建新的驱动程序时,更改驱动程序代码,或者强调
驱动程序。您还可以在测试的每个阶段使用poolmon来查看
驱动程序的分配模式和自由操作,并揭示如何
驱动程序在任何给定时间使用的大量池内存。
下面是命令:

 poolmon [/iTag] [/xTag] [/c [LocalTagFile]] [/g [PoolTagFile]] [/s[TSSessionID]] [ /p | /p /p ] [/e] [/( | /)]  [/t | /a| /f| /d | /b| /m] [/l] [/n [File]] [/? | /h]

说明:
参数
/我只显示具有指定池标记的分配。你可以
在poolmon命令中有多个/i参数。不键入空格
在/i和tag参数之间。
/x从显示中排除具有指定标记的分配。你
在poolmon命令中可以有多个/x参数。不键入A
/x和tag参数之间的空格。
标记指定池标记或池标记模式。池标记是
区分大小写。tag参数可以包含星号()到
表示任何字符或问号的零个或多个实例
?*)表示任何字符的一个实例。不要开始标记
带星号。
/C在显示器上添加列(映射驱动程序),列出
使用每个池标记的本地计算机。支持此功能
仅适用于32位版本的Windows。
local tag file指定本地标记文件的路径和文件名,
包含本地驱动程序列表的格式化文本文件
计算机,以及它们分配的标记值。这个文件就是数据
使用/c时出现的映射驱动程序列的源
参数.默认值为localtag.txt。
如果使用/c参数,但不指定
localtag file和poolmon在
当前目录,poolmon通过扫描生成localtag.txt文件
本地计算机上的驱动程序
(%systemroot%\system32\drivers*.sys)。
/g将列添加到显示(映射的驱动程序)中,列出窗口
分配每个标记的组件和常用驱动程序。
pooltagfile指定格式化文本文件的路径和文件名
列出Windows组件和常用驱动程序的名称
以及它们指定的标记值。此文件是
使用/g参数时显示的映射驱动程序列。
默认值是pooltag.txt,由Microsoft提供。普罗塔格
包含在windows驱动程序工具包的tools\other子目录中
(WDK)。
/s显示来自终端服务会话池的分配。
tssessionid仅显示指定会话池中的分配。
不要在/s参数和tssessionid之间键入空格
争论。
/p仅显示来自非分页池的分配。
/p/p仅显示来自分页池的分配。
/e显示池总数。总数显示在
显示。
/(或/)打开“按更改排序”模式。带/(或/),普尔蒙
按值(分配、自由操作和
字节),而不是值。每个值的变化显示在
值后面的括号。
与/a、/f、/b或/m一起使用。例如,poolmon/a对显示进行排序
按分配数,而poolmon/(/a按
分配数量的变化。
左括号和右括号字符具有相同的
效果和可以互换使用。
/按标记名按字母顺序排序。这是默认设置。
/a按分配数对标记排序。
/f按可用操作数对标记进行排序。
/d根据字节分配和字节之间的差异对标记进行排序
释放。
/b按使用的字节对标签进行排序。
/m按每次分配的字节对标记进行排序。
/l关闭突出显示。默认情况下,poolmon会突出显示
自上次更新后已更改。
/n将poolmon输出的快照保存到文件中,而不是
在命令窗口中显示。可以包括其他命令行
配置输出的参数。
因为快照数据是静态的,所以显示更改的列
poolmon显示中的in值不会出现在快照文件中。
文件指定快照文件的名称和位置。默认值
是poolsnap.log。
/?或/h显示命令行语法。/?和/h参数
同样的效果,可以互换使用。

关于windows - Poolmon负数是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55117771/

10-11 15:24