我有一个在作为服务运行的Windows Server上运行的C#应用程序。我最近在应用程序中引入了内存泄漏,并且已经使用OutOfMemoryException
s崩溃了几次。这些崩溃产生了WER报告和转储文件。有两个转储文件,triage.dmp和memory.hdmp。我可以打开triage.dmp并查看线程状态,但它没有关于应用程序内存的任何信息。我想打开memory.hdmp但是我不能同时使用Visual Studio和Windbg我收到错误声明文件已损坏。这发生在多个memory.hdmp文件中。
是否有一些技巧可以打开这些文件或它们实际上是否已损坏?如果是,Windows是否需要一些配置才能生成有效的hdmp文件? memory.hdmp是否有调试内存泄漏所需的信息?
提前感谢所有帮助!
答案 0 :(得分:1)
使用Windbg,当存在未处理的异常时,hdmp文件通常是WER收集的完整内存转储。您可能希望使用
下载调试器Getting windbg without the whole WDK?
如果这是基于.NET的托管应用程序,则设置默认符号路径
!pe -nested
应该显示异常链。如果你真的在记忆之后,那么使用
!EEHeap -gc
如果你想挖掘特定类型的消费记忆
!DumpHeap -stat
对于Native用户模式堆,您可以运行
!address -summary
对于堆详细信息
!heap -a
对于特定堆
!heap -x
我想我错过了windbg方面。 Debug diag或procdump可以帮助收集有效的崩溃转储。
Procdump -e -w -ma(进程名称)/ pid
应该做的伎俩。
您也可以使用procdump替代wer
Procdump -ma -i
了解更多@ https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
希望这有帮助