如何获取已处理异常的故障转储?

Posted

技术标签:

【中文标题】如何获取已处理异常的故障转储?【英文标题】:How to get crash dump on Handled Exception? 【发布时间】:2009-10-08 15:35:34 【问题描述】:

我的 dll 被一个模块使用,该模块肮脏地捕获所有异常并将其登录到文件中。

我的问题是客户站点中存在访问冲突,只能在其计算机上重现,我希望该客户能够为此问题生成转储文件。

我试图在我的 dll 中生成一个 AV 并使用 adplus 生成一个转储文件,但由于 AV 被使用我的 dll 的模块捕获,因此没有创建转储文件。

所以我的问题是:

有没有办法在处理异常时生成故障转储文件?

谢谢,

亚恩

【问题讨论】:

【参考方案1】:

使用ADPlus,您可以阅读更多关于配置ADPlus here(特定异常的小型转储)的信息

您的配置文件将如下所示:

<ADPlus>
  <Settings>
    <RunMode>CRASH</RunMode>
    <Option>Quiet</Option>
  </Settings>
  <Exceptions>
    <Config>
      <Code>AllExceptions</Code>
      <Actions1>FullDump</Actions1>
    </Config>
  </Exceptions>
</ADPlus>

【讨论】:

谢谢。我对adplus配置文件一无所知,看起来很有用。【参考方案2】:

对于 Windows Vista SP1 及更高版本,可以将 Windows 错误报告服务配置为在应用程序崩溃时生成崩溃转储:

在注册表项下:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows 错误报告\LocalDumps]

定义值:

DumpFolder (REG_EXPAND_SZ) - 存储转储文件的位置 DumpType (REG_DWORD) - 2 表示完全转储,1 表示小型转储

这适用于 32 位和 64 位程序。见http://msdn.microsoft.com/en-us/library/bb787181.aspx

【讨论】:

我在这里看到的问题是处理的异常不会使进程崩溃。

以上是关于如何获取已处理异常的故障转储?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取已向已退出转储核心的另一个进程发送 SIGABRT 信号的进程的 pid

无法读取 windbg 中的故障转储

如何使用参数自动从 Azure webapp 获取完整内存转储

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

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

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