我正在调查我们的.Net 4.0应用程序中的本机内存泄漏,该应用程序使用System.DirectoryServices托管包装器进行AD操作。
我打电话给!heap -l </ strong>并得到很多结果,包括以下内容:
000007fdb4bb1e65: KERNELBASE!LocalAlloc+0x0000000000000071
000007fdacb73794: adsldpc!AllocADsStr+0x000000000000004a
000007fdacb8967c: adsldpc!Oids+0x00000000000000bc
000007fdacb8a7d1: adsldpc!ObjectClassDescription+0x00000000000002bd
000007fdacb8e72d: adsldpc!FillClassInfoArray+0x0000000000000135
000007fdacb8f55c: adsldpc!ProcessSchemaInfo+0x000000000000008c
000007fdacb8ff3d: adsldpc!LdapReadSchemaInfoFromServer+0x000000000000072d
000007fdacb920da: adsldpc!LdapGetSchema+0x00000000000003fe
000007fdacb86388: adsldpc!LdapGetSyntaxOfAttributeOnServerHelper+0x000000000000003c
000007fdacb86e45: adsldpc!LdapGetSyntaxOfAttributeOnServer+0x0000000000000031
000007fdacb7af1a: adsldpc!ADsGetColumn+0x000000000000043a
000007fdabb5c0a8: adsldp!CLDAPGenObject::GetColumn+0x0000000000000050
000007fd4769c15d: +0x000007fd4769c15d
我们不直接在我们的应用程序中使用任何本机代码,所以我猜测 000007fd4769c15d 是System.DirectoryServices原生图像中的一个地址,我称之为!IP2MD 000007fd4769c15d 结果如下:
MethodDesc: 000007fd4773ab28
Method Name: DomainBoundILStubClass.IL_STUB_CLRtoCOM(IntPtr, IntPtr, IntPtr)
Class: 000007fd46b6a758
MethodTable: 000007fd46b6a7d0
mdToken: 0000000006000000
Module: 000007fd46b60348
IsJitted: yes
CodeAddr: 000007fd4769c090
Transparency: Safe critical
所以现在我有代码地址,但不知道如何处理它。我想进一步'展开'堆栈跟踪,看看哪个代码调用了这个方法。我怎么能做到这样的事情呢?
答案 0 :(得分:0)
使用bu 000007fd4769c090
设置CodeAddr值的断点。然后g
继续。命中断点后,本地堆栈为kb
,托管堆栈为!clrstack
。