2

在 windbg 中,我可以使用 lm 列出加载的模块。

如何找到这些程序集的内存占用?

我正在分析一个怀疑使用过多内存的进程的转储,我注意到的一件事是程序集的数量,但不确定它们在内存中占用的大小。

此外,它们似乎不在连续的内存位置。或者如果我以某种方式对 lm 的输出进行排序?

谢谢!

4

2 回答 2

4

!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%
于 2013-09-11T06:39:32.963 回答
2

您可以使用 . 检查每个模块的大小lmvm module_name。有一个ImageSize输出指示该模块的十六进制大小。

编辑:另一种方法是首先lm显示所有模块,然后使用!lmi start_address!lmi module_name获取有关特定模块的信息。!lmi有一个 Size 字段,指示图像大小。

请注意,对于加载的 .NET 4 本机图像,您必须使用!lmi start_address,因为模块名称解析失败。

于 2013-09-11T02:14:06.520 回答