调试进程的转储代码

时间:2014-01-07 09:14:06

标签: c# debugging memory-leaks windbg heap-memory

我的C#应用​​程序消耗了太多的工作集内存,我想看到工作集内存中的对象。我转储了进程并创建了一个转储文件作为这个问题的答案。 How do I use a dump file to diagnose a memory leak? 但我无法从Windbg调试该文件,因为它在我输入命令'.loadby sos clr'时说“无法加载clr”。命令'!dumpheap -stat'和'!threads'也说'找不到导出线程'。请建议我调试这个转储文件并查找对象的方法。除了使用VS2013 Ultimate之外,请提供解决方案。

4 个答案:

答案 0 :(得分:2)

您必须通过命令“.load _FULL_SOS_DLL_PATH _ ”而不是“.loadby sos clr”加载SOS.DLL,因为通常安装了不同的.NET框架,因此您必须指示WinDbg加载正确的...

答案 1 :(得分:2)

我建议您使用Psscor2Psscor4扩展名(取决于您的应用程序使用的.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