调试进程的转储代码



我的 C# 应用程序消耗了太多的工作集内存,我想查看工作集内存中的对象。我转储了该过程并创建了一个转储文件作为这个问题的答案。如何使用转储文件诊断内存泄漏?但是我无法从 Windbg 调试文件,因为当我键入命令".loadby sos clr"时,它说"无法加载 clr"。此外,命令"!dumpheap -stat"和"!threads"也说"未找到导出线程"。请告诉我一种调试此转储文件并找到对象的方法。请提供除使用VS2013旗舰版之外的解决方案。

我建议您使用 Psscor2 或 Psscor4 扩展(取决于您的应用程序使用的 .NET 版本)。设置调试环境(安装 WinDbg 并复制到其文件夹 Psscor 文件)后,加载转储文件并加载适当版本的 Psscor:

.load psscor4

然后执行命令从Microsoft服务器下载符号(如果需要),确保您有互联网连接:

!symfix

从现在开始,您应该可以访问许多非常有趣的命令(查找 !help 列出它们)。要查看每种类型的内存使用情况,请使用:

!dumpheap -stat

要查看总体内存使用情况(iu 表示还将包括无根对象):

!heapstat -iu

还可以使用 VMMap 工具查看进程的总体内存使用情况(而不是内存转储),以查看托管堆消耗了多少内存。

你的目标框架是什么?

.loadby sos clr 

是 .net 4 命令,要调试以前的版本 4 尝试使用

.loadby sos mscorwks

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

对于初次使用的用户来说,您可以使用的另一个程序比WinDbg容易得多,它是调试诊断工具(来自MSDN):http://www.microsoft.com/en-us/download/details.aspx?id=40336。

当我使用它时,我只需通过右键单击任务管理器中的进程创建一个转储文件。

最新更新