WinDbg怎么查看内存?WinDbg用户态和内核态用什么命令

更新时间:2026-08-07 15:03

在WinDbg里分析内存,要根据用户态进程或内核调试选择汇总命令。用户态使用 !address -summary 了解当前进程的地址空间分布,堆占用可用 !heap -s 继续定位。内核转储使用 !vm 了解系统虚拟内存,用 !poolused 查找异常偏大的池分配。汇总结果只负责指出方向,后续还要落到具体地址、堆块或池标签。

WinDbg查看当前目标的内存分布

1、确认命令会作用于哪个目标。

WinDbg的Command窗口上方显示命令输出,下方提示符用于输入命令。用户态调试中,!address 指向当前目标进程的地址空间。内核调试里,它只搜索内核内存,因此两种上下文的输出不能混在一起解释。

WinDbg怎么查看内存?WinDbg用户态和内核态用什么命令

2、读取汇总并定位可疑区域。

在用户态输入 !address -summary,观察Heap、Stack、Image、Private等类别是否有明显偏大的部分。拿到可疑地址后输入 !address 地址,输出会给出该区域的Usage、Type、State和Protect。发现Heap后转用堆命令,Image或FileMap则需要核对映像和映射文件。

3、把堆占用继续定位。

输入 !heap -s 可以请求当前进程全部堆的汇总。已知某个地址时,使用 !heap -x 地址 可搜索包含该地址的堆块。堆统计增长并不自动等于泄漏,最好在同一复现场景下保存两次或多次输出,对比同一堆或同一块的变化。

用户态和内核态不要混用这些命令

调试位置先用命令输出重点
当前用户进程!address -summary地址空间类别和可疑区域
当前用户进程的堆!heap -s所有堆的汇总,或按地址继续查堆块
内核模式转储!vm目标系统的虚拟内存使用统计
内核池异常!poolused按池标签判断哪类分配占用异常偏大

!vm 是内核模式命令,默认输出系统范围的虚拟内存统计和各进程内存统计。!poolused 只能帮你找出异常突出的标签。将标签和可疑驱动、模块或复现时间对应起来,才能继续判断来源。

知道地址后怎样读实际内容

  • 判断区域属性:使用 !address 地址,确认它是私有内存、映像还是映射区域,以及是否已经提交。
  • 读取内存数据:选择合适的 d* 显示命令读取虚拟地址或地址范围。地址不是十六进制时,留意当前进制,避免把输入值解释错。
  • 比较是否持续增长:在同一操作前后重复执行同一条汇总命令。相同类别、堆或池标签连续增长,才值得继续沿分配路径排查。
  • 命令没有预期结果:检查转储类型和当前调试上下文。用户态转储看不到完整内核池,而内核转储也未必保留某个应用堆的全部细节。