应用程序在启动时崩溃 - 如何获取崩溃转储文件?

Posted

技术标签:

【中文标题】应用程序在启动时崩溃 - 如何获取崩溃转储文件?【英文标题】:Application crashes on start - how to get a crash dump file? 【发布时间】:2012-01-14 22:56:06 【问题描述】:

我的 winform 应用程序一启动就崩溃。此问题仅发生在其中一台客户端计算机中。适用于所有其他客户。我正在考虑使用 ADPlus 来获取故障转储,但问题是为了在崩溃模式下配置 ADPlus,需要首先将调试器附加到正在运行的应用程序。这意味着当我配置 ADPlus 时应用程序必须正在运行,但是,正如我所说,我的应用程序在我启动它时就会崩溃。它没有给我运行 ADPlus 的机会。知道 ADPlus 是否可以在这种情况下使用吗?在这种情况下,我可以使用任何其他工具生成进程转储吗?

【问题讨论】:

【参考方案1】:

由于无法启动程序然后及时附加调试器,可以尝试以下思路之一:

在程序崩溃的机器上启动程序在调试器下。 As already mentioned, ProcDump 足以满足此目的,或者您可以使用 Visual Studio 或 WinDBG。 如果你不能在调试器下轻松启动程序(例如,如果它实际上是一个Windows服务),use gflags to make Windows start the program under the debugger.这将为你的程序文件名创建一个子键under the Image File Execution Options registry key. Set your debugger as the postmortem debugger, so it always launches when any program crashes.

如果发生崩溃,调试器会自动中断并自动创建转储或让您手动创建转储。

如果您无法运行调试器,甚至 ProcDump,您可以使用 Windows 的内置故障转储工具自动创建转储:

在 Windows XP 和 Windows Server 2003 上,通过运行以下命令将 Dr. Watson 设置为事后调试器:

drwtsn32 -i

以下是有关此命令的作用以及如何使用 Dr. Watson 的信息:Capturing Application Crash Dumps

在 Windows Vista SP1、Windows Server 2008 及更高版本上,设置 Windows 错误报告以通过创建此注册表项在本地保存转储:

HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

您无需在此键下创建或设置任何值或子键。如果您想更改设置,这里有更多信息:Collecting User-Mode Dumps

请注意,“执行自己的自定义崩溃报告的应用程序,包括 .NET 应用程序,不受”WER 支持。这对您来说是个问题,因为您的应用使用 WinForms - 尽管有迹象表明该功能确实适用于 Windows 7 上的 .NET 4 应用。

【讨论】:

【参考方案2】:

您可以使用来自 Sysinternals 的 ProcDump 来捕获转储。

【讨论】:

以上是关于应用程序在启动时崩溃 - 如何获取崩溃转储文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?

JVM崩溃。如何获取错误日志或核心转储

JVM崩溃..如何获取错误日志或核心转储

Linux 中的核心转储

如何使用crash工具分析Linux内核崩溃转储文件

如何让android打印掉崩溃系统应用程序的核心转储?