我的C#应用程序消耗了太多的工作集内存,我想看到工作集内存中的对象。我转储了进程并创建了一个转储文件作为这个问题的答案。 How do I use a dump file to diagnose a memory leak? 但我无法从Windbg调试该文件,因为它在我输入命令'.loadby sos clr'时说“无法加载clr”。命令'!dumpheap -stat'和'!threads'也说'找不到导出线程'。请建议我调试这个转储文件并查找对象的方法。除了使用VS2013 Ultimate之外,请提供解决方案。
答案 0 :(得分:2)
您必须通过命令“.load _FULL_SOS_DLL_PATH _ ”而不是“.loadby sos clr”加载SOS.DLL,因为通常安装了不同的.NET框架,因此您必须指示WinDbg加载正确的...
答案 1 :(得分:2)
我建议您使用Psscor2或Psscor4扩展名(取决于您的应用程序使用的.NET版本)。设置调试环境(安装 WinDbg 并复制到其文件夹 Psscor 文件)后,加载转储文件并加载适当版本的Psscor:
.load psscor4
然后执行命令从Microsoft服务器下载符号(如果需要),确保您有互联网连接:
!symfix
从现在起你应该可以访问很多非常有趣的命令(寻找!帮助列出它们)。要查看每种类型的内存使用情况:
!dumpheap -stat
要查看整体内存使用情况(iu表示还将包含无根对象):
!heapstat -iu
您还可以使用VMMap工具查看进程的整体内存使用情况(而不是内存转储),以查看托管堆消耗了多少内存。
答案 2 :(得分:1)
您可以使用的另一个程序比WinDbg更容易为初次使用的用户提供调试诊断工具(来自MSDN):http://www.microsoft.com/en-us/download/details.aspx?id=40336。
当我使用它时,我只需通过右键单击任务管理器中的进程来创建转储文件。
答案 3 :(得分:0)
您的目标框架是什么?
.loadby sos clr
是.net 4命令,要调试之前的版本4尝试使用
.loadby sos mscorwks