我希望我们的应用程序有一个捕捉崩溃的特殊窗口。这样的窗口将能够以电子方式向我们发送堆栈跟踪(在 Mac 上)或 Windows 上的 .dmp 文件。
我可以处理窗口及其内部功能——但如何及时捕捉应用程序崩溃以优雅地显示自定义窗口?
我使用的是 Qt 4.8.5
我希望我们的应用程序有一个捕捉崩溃的特殊窗口。这样的窗口将能够以电子方式向我们发送堆栈跟踪(在 Mac 上)或 Windows 上的 .dmp 文件。
我可以处理窗口及其内部功能——但如何及时捕捉应用程序崩溃以优雅地显示自定义窗口?
我使用的是 Qt 4.8.5
首先-对于崩溃,我了解诸如访问冲突,除以0等之类的事情,而不是您自己抛出的异常-这些可以通过实现来处理QApplication::notify
。如果您需要独立于平台的解决方案,那么我想您必须为每个平台上的功能制作一个包装器:
在 Windows 上,我猜你可以用
__try { ... } __except { ... }
也许您可以将 QApplication 子类化,并在您的类中实际处理信号处理程序安装/添加 try-except 处理程序(取决于平台),然后调用一些通用方法,您可以在其中进行所有设置并开始事件循环。那只是我的两分钱。
并非所有崩溃都可以尝试捕获。查看此仓库: https ://github.com/KandaoVR/qt-breakpad
- 这是一个使用google breakpad处理 c++ 崩溃并启动 Qt 应用程序以将崩溃日志发送回服务器的演示。
- 大部分代码是从Qt Creator项目中提取的。
- 该演示包括一个
QtBreakpadDemo
崩溃,QtCrashHandler
然后启动。