如何处理 DirectX 11 驱动程序崩溃
How to handle DirectX 11 driver crash
首先,如果这个问题被问了很多次,我很抱歉,但我在网上找不到任何正确的答案。
我正在开发一款使用 DirectX 11.1 的游戏。我已经使用崩溃报告器很长一段时间了,使用Google的Crash-Pad库女巫将小型转储上传到服务器,以后可以使用Visual Studio打开该服务器,或者在崩溃时取消符号化并打印每个线程的堆栈跟踪。
我一直收到一些有线堆栈跟踪的垃圾邮件,这些堆栈跟踪非常深入驱动程序 dll(当然不能去符号化(,我一直认为这些堆栈跟踪与驱动程序崩溃有关。
Thread 10224 Crashed:
0 igd10iumd64.dll 0x7ffbddcb4cba <unknown>
1 igd10iumd64.dll 0x7ffbddcae78e <unknown>
2 igd11dxva64.dll 0x7ffbaef99377 <unknown>
3 igd10iumd64.dll 0x7ffbddcae2f9 <unknown>
4 igd10iumd64.dll 0x7ffbddd89e17 <unknown>
5 igd11dxva64.dll 0x7ffbaef73c5c <unknown>
6 igd11dxva64.dll 0x7ffbaef7314d <unknown>
7 igd11dxva64.dll 0x7ffbaef3efcf <unknown>
8 igd11dxva64.dll 0x7ffbaeff158a <unknown>
9 igd11dxva64.dll 0x7ffbaefe8cf6 <unknown>
10 igd11dxva64.dll 0x7ffbaefe96b8 <unknown>
我现在的问题是,在典型的 DirectX 应用程序中,如何处理此类崩溃并确保应用可靠且不会崩溃?(即使我需要重新创建整个D3D11设备(
我已经按照MSDN指南处理标准DXGI返回代码,以防设备删除和重置(DXGI_ERROR_DEVICE_REMOVED && DXGI_ERROR_DEVICE_RESET
(
谢谢
编辑:我不介意退出我的应用程序,我只想向用户解释我的应用程序遇到致命错误,现在将退出(尽可能正确(
捕获崩溃和终止的最简单方法是在整个主函数周围使用结构化异常处理程序。这将捕获访问冲突、除以零和其他可能导致崩溃的硬错误。从那里,您可以显示一个弹出窗口,说明在终止进程之前崩溃的性质。
请注意,SEH 不允许析构函数运行。通常,这是一件坏事,但无论如何你都会扼杀这个过程,所以这不是一个大问题。但是,在对象的构造函数中获取的任何锁都不会在执行 SEH 处理程序时释放。不仅如此,如果对象本身被分配到堆栈上,它们将不再存在,从而阻止任何形式的真正清理。
同样,以上不是问题,因为您的进程正处于崩溃之中。数据损坏现在无关紧要,因为该过程已经 FUBARed。您需要做的就是弹出一个消息框,说您崩溃了,保存您绝对需要的任何信息(此处不使用锁,因为锁定状态现在是不确定的(,然后终止(不退出(进程(如果您退出,则会发送进程/线程分离通知,这可能会导致死锁(。
这可以扩展到您显式创建的所有其他线程,方法是让线程从公共入口点开始,进入 SEH 帧,然后分支到各自的任务。
- Mongodb c++驱动程序:如何查询元素的数组
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 使用mongocxx驱动程序时包含头文件问题
- void*到驱动程序中的UnicodeString
- C++驱动程序看不到头文件
- 用于创建/注册虚拟存储设备的 IOKit 驱动程序
- 员工测试驱动程序数据结构
- 获取 OID(类型::b_oid)作为 MongoDB C++驱动程序中的字符串
- 如何在 c++ 中映射驱动程序?
- 如何在 cuda 中将 kd 树从主机复制到驱动程序
- Visual Studio 如何在内核模式驱动程序项目中使用C++标准库?
- 为什么我的驱动程序只读取部分字符串?
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何在C++中将OID_PM_WOL_PATTERN_LIST发送到NDIS驱动程序?
- C++ 创建 NdisProt 驱动程序的句柄
- 使用 mongo c++ 驱动程序查询嵌套的 BSON 文档
- 有没有办法使用 mongocxx 驱动程序从 GridFS 集合的文件下载任意范围?
- 使用CMake ExternalProject_Add构建mongo cxx驱动程序
- SQL Server-未找到数据源名称,也未指定默认驱动程序
- 如何处理 DirectX 11 驱动程序崩溃