故障转储完成通知

发布于 2024-12-08 03:49:20 字数 186 浏览 0 评论 0原文

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

如果故障转储太大,那么需要一些CPU时间,Windows调试器(或watson)中是否有任何回调函数可以告诉故障转储完成情况?

或者是否有任何机制可以强制刷新故障转储并开始分析。

我不是在寻找基于民意调查的解决方案。

I am forcibly crashing the process and trying to analyze the crash dump.
I am facing the race condition between crash the process and crash dump generation (flush).

If the crash dump is too big then it takes some cputime, is there any callback function in windows debugger (or watson) which can tell about the crash dump completion?

Or is there any mechanism through which I can flush the crash dump forcibly and start analysis.

I am not looking for poll based solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清风挽心 2024-12-15 03:49:20
  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. 分析转储文件

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

  1. Add WER registry entry
  2. Crash the process
  3. Run your self-written tool, which
    3a) finds werfault.exe process and
    3b) join on that process (wait until it completes)
  4. Analyze the dump file

Step 3b does not use polling. A process is a synchronization object which gets signaled.

Note that step 3a will not work before crashing and if the crash dump is small, werfault.exe may already have exited, so it might wait forever. To bypass this, you might want to register your application as the debugger for werfault.exe, which internally forwards the arguments to werfault.exe and then waits until it completes.

The complete sequence then looks like this:

  1. Add WER registry entry
  2. Add debugger entry for werfault.exe
  3. Crash the process
  4. Instead of werfault.exe, your application will run.
    4a) Start werfault.exe to create the dump and
    4b) join on that process (wait until it completes)
  5. Maybe remove the debugger entry, if you don't want it permanently
  6. Analyze the dump file

Finally I would say you can achieve your goal with some implementation effort. The question is: how many seconds will this save and how many hours will you need for implementation?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文