如何将字符串追溯到创建它的代码行,方法名称,类名和程序集?

时间:2017-04-10 18:24:00

标签: .net debugging windbg sos

我的托管进程的GC堆转储显示,除了其他类型之外,还有大量的字符串对象。

我把它们中的几个归为一类:

> dumpheap -type System.String
> !do <address>

告诉我字符串的内容是什么,除此之外我还不感兴趣。

所以,我跟着字符串到GC根。但首先,我想确认这是在LOH。

> !gcwhere <address>
> !gcroot <address>

现在这就是我能得到的。

我想知道在哪里(哪行代码创建了它,最好是!该行的dumpil)以及创建它的方法的方法描述,该方法的声明类型,程序集和加载程序集的app域。

1 个答案:

答案 0 :(得分:1)

.NET框架不需要运行应用程序的信息,因此它不会存储它。还没有类似于激活此类存储的GFlags +ust设置的标志。你现在拥有的工具(转储文件或实时调试)是不可能的。

您需要一个内存分析器,如ANTS memory profilerJetBrains dotMemory。即使那些默认情况下也不会收集分配数据,您必须激活它。

dotMemory的截图:

dotMemory Screenshot