【问题标题】:Crash Dump completion notification故障转储完成通知
【发布时间】:2011-10-04 09:50:04
【问题描述】:

我正在强制使进程崩溃并尝试分析故障转储。 我正面临崩溃进程和崩溃转储生成(刷新)之间的竞争条件。

如果故障转储太大,则需要一些 cputime,Windows 调试器(或 watson)中是否有任何回调函数可以告知故障转储完成?

或者有什么机制可以强制刷新故障转储并开始分析。

我不是在寻找基于投票的解决方案。

【问题讨论】:

  • 这没有任何意义,没有什么需要“刷新”。当 MiniDumpWriteDump() 返回时转储完成。
  • 好吧,我没有调用 MiniDumpWriteDump() ,我只是将注册表项放在 Windows 错误报告下以进行故障转储并使进程崩溃。我期待崩溃被windows转储到相应的进程。另外,如果 MiniDumpWriteDump() 被 windows 调用,我不确定如何跟踪它。
  • 我在做以下步骤: 1. 在windows error reporting (wer) 下添加对应crash dump 的注册表项 2. 给给pid 的进程crash 3. 等待操作系统自动生成crash dump? ?? (这就是问题所在) 4.分析故障转储文件
  • 我拥有的一种解决方案是轮询机制以使用 process.HasExited 等待进程退出。

标签: windows process analysis crash-dumps


【解决方案1】:
  1. 添加 WER 注册表项
  2. 使进程崩溃
  3. 运行您自己编写的工具,该工具 3a) 找到 werfault.exe 进程和 3b) 加入该进程(等到它完成)
  4. 分析转储文件

步骤 3b 不使用轮询。进程是一个收到信号的同步对象。

请注意,步骤 3a 在崩溃之前将不起作用,如果崩溃转储很小,则 werfault.exe 可能已经退出,因此它可能会一直等待。要绕过这一点,您可能希望将您的应用程序注册为 werfault.exe 的调试器,该程序会在内部将参数转发给 werfault.exe,然后等待它完成。

完整的序列如下所示:

  1. 添加 WER 注册表项
  2. 为 werfault.exe 添加调试器条目
  3. 使进程崩溃
  4. 您的应用程序将运行,而不是 werfault.exe。 4a) 启动 werfault.exe 以创建转储和 4b) 加入该进程(等到它完成)
  5. 如果您不想永久删除调试器条目,可以删除它
  6. 分析转储文件

最后我想说的是,您可以通过一些实施工作来实现您的目标。问题是:这将节省多少秒,实施需要多少小时?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 2016-03-21
    • 1970-01-01
    • 2012-08-07
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多