首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理DirectX 11驱动程序崩溃

如何处理DirectX 11驱动程序崩溃
EN

Stack Overflow用户
提问于 2018-06-03 20:10:53
回答 1查看 494关注 0票数 1

首先,如果这个问题被问了很多次,我很抱歉,但我在网上找不到任何合适的答案。

我正在开发一个使用DirectX 11.1的游戏。我已经使用了很长一段时间的崩溃记者使用谷歌的Crash-Pad library向导上传小型转储到一个服务器,可以稍后用Visual Studio打开,或取消符号化,并打印出崩溃时每个线程的堆栈跟踪。

我总是被一些连接的堆栈跟踪垃圾邮件,这些堆栈跟踪非常深入到驱动程序dll中(当然,这些堆栈跟踪不可能是去符号化的),我一直认为这些堆栈跟踪与驱动程序崩溃有关。

代码语言:javascript
复制
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设备)

我已经在处理设备移除和重置的情况下的标准DXGI返回代码( MSDN guide之后的DXGI_ERROR_DEVICE_REMOVED && DXGI_ERROR_DEVICE_RESET

谢谢

编辑:我不介意退出我的应用程序,我只想向用户解释我的应用程序遇到了致命错误,现在将退出(尽可能正确)

EN

回答 1

Stack Overflow用户

发布于 2018-06-12 00:47:34

捕获崩溃和终止的最简单方法是在整个主函数周围使用结构化异常处理程序。这将捕获访问冲突,除以零,以及其他可能导致崩溃的硬错误。从那里,您可以在终止进程之前显示一个弹出式窗口,说明崩溃的性质。

请注意,SEH不允许运行析构函数。通常情况下,这是一件坏事,但在这里您无论如何都会杀死进程,所以这不是什么大问题。但是,在对象的构造函数中获取的任何锁都不会在SEH处理程序执行时被释放。不仅如此,如果对象被分配到堆栈上,那么对象本身将不再存在,从而阻止任何类型的真正清理。

同样,上面的问题在这里也不是问题,因为您的进程正在崩溃。数据损坏现在已经无关紧要了,因为这个过程已经是FUBARed了。您所需要做的就是弹出一个消息框,告诉您崩溃了,保存您绝对需要的任何信息(这里不使用锁,因为锁定状态现在是不确定的),然后terminate (不退出)进程(如果您退出,将发送进程/线程分离通知,这可能会导致死锁)。

这可以扩展到您显式创建的所有其他线程,方法是让线程从公共入口点开始,进入SEH帧,然后分支到各自的任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50666254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档