我正在处理内存泄漏(内存使用量正在增加),我们发现该应用程序的共享内存中有一些东西:
我已经使用Visual Studio打开转储文件,并且在“内存”调试窗口中,地址0xb48B661f44
周围有很多信息,但是Windbg
!heap -h 0
命令提供了以下内容:
...
Segment at 000000b48a850000 to 000000b48b04f000 (007ff000 bytes committed)
Segment at 000000b48f650000 to 000000b49061f000 (00fcf000 bytes committed)
...
换句话说,堆中不存在提到的地址,这意味着它是共享数据。
我想知道堆上的哪个对象正在引用该数据。有什么办法找出来吗?
在第一个评论后编辑
同时,我尝试使用Windbg
的{{1}}命令,但这似乎不起作用:
s
=>没有结果。
对于您的信息,起始地址和结束地址的检索方法如下:
s -q 0xb483b70000 0xb4842af000 0xb48B661f44
因此,我相信通过选择!heap -h 0
0:000> !heap -h 0
Index Address Name Debugging options enabled
1: b483b70000
Segment at 000000b483b70000 to ...
...
4: ...
Segment at ... to 000000b4842af000 (00002000 bytes committed)
作为起点和0xb483b70000
作为终点,我已经覆盖了整个堆。
第二次修改
我还使用0xb4842af000
命令研究了提到的内存地址,但我不理解输出内容:
!address
此信息说明所提到的地址是什么?