2017-01-11 242 views
0

我有一个C#应用程序在作为服务运行的Windows Server上运行。我最近在应用程序中引入了内存泄漏,并且使用OutOfMemoryException s崩溃了几次。这些崩溃产生了WER报告和转储文件。有两个转储文件,triage.dmp和memory.hdmp。我可以打开triage.dmp,并查看线程状态,但它没有关于应用程序内存的任何信息。我想打开memory.hdmp,但我不能,使用Visual Studio和Windbg我得到一个错误,指出该文件已损坏。这发生在多个memory.hdmp文件中。无法打开HDMP文件

打开这些文件是否有一些窍门,或者它们实际上是否损坏?如果是这样,Windows是否需要一些配置才能生成有效的hdmp文件? memory.hdmp甚至有我需要调试内存泄漏的信息?

在此先感谢您的帮助!

+0

我发现我的驱动器上的3个HDMP文件并可以在WinDbg 10.0.10586.567中打开它们。你正在使用哪个版本? –

回答

1

使用Windbg,当存在未处理的异常时,hdmp文件通常是由WER收集的全部内存转储。您可能需要下载使用

Getting windbg without the whole WDK?

调试如果这是一个基于.NET托管应用程序,一旦你设置的默认符号路径

! PE -nested

应该向你展示异常链。如果你的内存后真的再使用

! EEHeap -gc

如果您希望通过特定类型的耗内存

! DumpHeap挖-stat

对于本机用户模式堆,您可以运行

!地址-summary

对于堆细节

!堆-a

对于特定堆

!ħ eap -x

我想我错过了windbg方面。调试diag或procdump可以帮助收集有效的崩溃转储。

Procdump -e -w -ma(进程名)/ PID

应该做的伎俩。

您可以使用procdump为WER更换以及

Procdump -ma -i

更多@https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

希望这有助于

+1

我想OP知道WinDbg是什么。他说他得到“文件已损坏”的错误信息 –

+0

我的坏消息没有阅读windbg部分。如果windbg说它的腐败可能它是curropt。使用procdump或调试诊断来收集转储。 – Addy

+0

@Addy ya看起来很糟糕。下次尝试procdump来获得转储。谢谢! – shortspider