预测程序会崩溃

Wad*_* M. 7 c# c++ crash

我已经使用谷歌Chrome一段时间了,我发现它具有非常优雅的崩溃控制功能.

就在崩溃之前,谷歌浏览器给出了一条消息" 哇!谷歌Chrome已经崩溃了.现在重启? ".紧接着,我会得到一个标准的Windows XP"这个程序遇到了问题,需要关闭." 使用"调试","不发送"和"发送错误报告"按钮.

我的问题是如何编译已编译的应用程序以提前检测崩溃情况?如果你知道如何在任何编程语言/平台上做到这一点会很棒.

谢谢

Mat*_*ley 16

谷歌浏览器使用一种技术(通常称为进程分离),其中"主机"UI管理它可以检测到的无响应的子进程(或者更糟糕的是,抛出错误并关闭).它会为您打开的每个选项卡启动一个新进程.

这是一篇文章,更详细地描述了这一点.

使用.net的Process类,您可以启动进程,检查它们是否响应甚至杀死它们.

如果要在自己的窗口中嵌入进程窗口,可以使用SetParent等平台功能在另一个窗口中移动一个窗口.在使用Forms时,我担心我不知道SetParent的托管替代方案,但我怀疑存在一个,所以在使用SetParent之前值得搜索.

如果主机进程崩溃,只需使用类似的东西AppDomain.CurrentDomain.UnhandledException就可以收到发生顶级异常的通知,但是在这个阶段你不太可能预测应用程序中的对象状态并重新启动(沿着有一些日志记录和通知用户)可能是你唯一明智的选择.

此处详细介绍了处理顶级异常的问题.


Joh*_*ing 12

我不知道谷歌的代码,所以我猜测.谷歌浏览器可能不会预测它会崩溃,但会检测到它已经崩溃.

在Windows中,您可以通过为所有未处理的异常提供处理程序来完成此操作.在此处理程序中,您可能会执行诸如重新启动应用程序,创建minidump文件等操作.

看一下SetUnhandledExceptionFilter函数的一个方法.

  • 请注意,Windows调试窗口之后出现的原因是google继续运行并在完成后将错误抛给操作系统. (3认同)