2011-10-04 70 views
0

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

如果崩溃转储太大,那么它需要一些cputime,有没有在Windows调试器(或watson),可以告诉崩溃转储完成的任何回调函数?

或者是否有任何机制可以通过它强制冲刷崩溃转储并开始分析。

我不是在寻找基于轮询的解决方案。

+0

这没有任何意义,没有什么需要“刷新”。当MiniDumpWriteDump()返回时转储完成。 –

+0

嗯,我不是调用MiniDumpWriteDump(),我只是把Windows注册表项放在崩溃转储的错误报告中,并使进程崩溃。我期待Windows的相应进程会崩溃崩溃。此外,我不知道如何跟踪MiniDumpWriteDump(),如果它由Windows调用。 – praveenCrawler

+0

我正在执行以下步骤: 1.在Windows崩溃转储对应的错误报告(wer)下添加注册表项。2.崩溃给定pid 的进程3.等待OS自动生成崩溃转储? (这是问题所在) 4.分析故障转储文件 – praveenCrawler

回答

0
  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. 分析转储文件

最后我会说你可以通过一些实施努力来实现你的目标。问题是:这个节省多少秒,你需要多少小时来实施?