Crush The Crash--蓝屏

游戏玩着玩着蓝屏了,这是让很多玩家崩溃的事情,这个更让开发者头疼,第一次遇到时候(还得去解决)不免还有点手足无措。

在《天涯明月刀》项目中也解决了一些这个问题,这里也聊下这个。

什么是蓝屏?

蓝屏英语叫法,或者google它的时候叫blur screen of death,简称bsod。

游戏崩溃了,就直接退了,系统崩溃了,就是蓝屏。

造成蓝屏的因素包括:

  • 硬件问题--显卡过热,内存突然松动,硬盘线断了。。。
  • 驱动问题
这些因素导致在系统内核中crash,最后就蓝屏了。

游戏是否能直接导致蓝屏?
第一次遇到同事那里蓝屏,我还挺好奇,如果能写出可以蓝屏的代码,留个后门,在游戏里看谁不爽,发个命令过去,直接蓝屏,多happy啊。
但其实标准情况下,user mode application(也就是我们的游戏)是不能直接导致蓝屏的。

这里细节可以看msdn上的这些文章:user mode and kernel mode
user mode的application,是有自己的process,有自己的一块virtual address,processor不能访问其他地址(包括属于操作系统内核的地址)。
process crash也只是crash自己,不能直接crash系统。

但是游戏在运行的时候会调用系统函数等,如果游戏有安全组件,去更改了这部分的驱动,那么就有可能更改了对于kernel部分的调用,影响其运行,最终导致crash。

定位
所以一旦出现了蓝屏,我们需要了解,就不需要在游戏正常运行的代码中去看是否有问题,直接往会接触到驱动,硬件和kernel调用的部分去定位即可。

蓝屏的dump收集
蓝屏也是有dump的。

系统失败这里,如果玩家出现蓝屏,可以根据玩家情况,或者拜托玩家在调试信息这里尽量选择全的信息,来获取dump。
这里的dmp是kernel mode的,只能使用windbg来查看,visual studio看不了。

显卡过热
实际工作中,能接触到最常见的,且游戏直接相关的,是显卡过热导致的显卡挂了,这里会导致显卡重启或者蓝屏。
我们在游戏中尽可能的利用显卡的每一份计算资源,去提升效率,让所有组件并行最大化,在同样的硬件下跑得更流畅,展示出更好的效果,但这直接也导致了散热更厉害。
加之现在不少JS会卖畸形显卡--在散热上偷工减料,跑跑LOL这种简单游戏玩的很流畅,一旦全速运转,散热不行,很快就挂了。
处理方法,一个是限帧,在游戏中正常限制在60fps,这个对于普通mmo足够了,这样起码对于一些特别牛的显卡,会降低散热,在散热不足的情况下降低出问题的风险。
在loading画面的时候,降低到更低的帧数,起码让显卡先冷一会也是好的。
一个是温度检测,在显卡厂商(比如nvidia)都会有自己专有的sdk,提供接口来获得显卡的温度,在温度过高的情况,做降帧降效果的处理,但是这个比较双刃剑,一般过一百度的时候做一下还可以,但是玩家会出现抱怨游戏效果下降的问题。

reference:
http://www.howtogeek.com/163452/everything-you-need-to-know-about-the-blue-screen-of-death/
https://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/hardware/hh439648(v=vs.85).aspx

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值