在 windbg 中,我可以使用 lm 列出加载的模块。
如何找到这些程序集的内存占用?
我正在分析一个怀疑使用过多内存的进程的转储,我注意到的一件事是程序集的数量,但不确定它们在内存中占用的大小。
此外,它们似乎不在连续的内存位置。或者如果我以某种方式对 lm 的输出进行排序?
谢谢!
在 windbg 中,我可以使用 lm 列出加载的模块。
如何找到这些程序集的内存占用?
我正在分析一个怀疑使用过多内存的进程的转储,我注意到的一件事是程序集的数量,但不确定它们在内存中占用的大小。
此外,它们似乎不在连续的内存位置。或者如果我以某种方式对 lm 的输出进行排序?
谢谢!
!address -summary 为您提供了一个很好的概述。检查图像行
0:008> !address -summary
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free 212 b13cb000 ( 2.769 Gb) 69.23%
Heap 455 25281000 ( 594.504 Mb) 47.18% 14.51%
<unknown> 861 2168d000 ( 534.551 Mb) 42.42% 13.05%
Image 662 4e8e000 ( 78.555 Mb) 6.23% 1.92%
Stack 156 3400000 ( 52.000 Mb) 4.13% 1.27%
Other 39 54000 ( 336.000 kb) 0.03% 0.01%
TEB 52 34000 ( 208.000 kb) 0.02% 0.00%
PEB 1 1000 ( 4.000 kb) 0.00% 0.00%
您可以使用 . 检查每个模块的大小lmvm module_name
。有一个ImageSize
输出指示该模块的十六进制大小。
编辑:另一种方法是首先lm
显示所有模块,然后使用!lmi start_address
或!lmi module_name
获取有关特定模块的信息。!lmi
有一个 Size 字段,指示图像大小。
请注意,对于加载的 .NET 4 本机图像,您必须使用!lmi start_address
,因为模块名称解析失败。