如何获取已处理异常的故障转储?
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