您的位置:首页 > 其它

Crush The Crash--蓝屏

2015-10-19 23:39 225 查看


游戏玩着玩着蓝屏了,这是让很多玩家崩溃的事情,这个更让开发者头疼,第一次遇到时候(还得去解决)不免还有点手足无措。
在《天涯明月刀》项目中也解决了一些这个问题,这里也聊下这个。
什么是蓝屏?
蓝屏英语叫法,或者google它的时候叫blur screen of death,简称bsod。
游戏崩溃了,就直接退了,系统崩溃了,就是蓝屏。
造成蓝屏的因素包括:

硬件问题--显卡过热,内存突然松动,硬盘线断了。。。
驱动问题
这些因素导致在系统内核中crash,最后就蓝屏了。游戏是否能直接导致蓝屏?第一次遇到同事那里蓝屏,我还挺好奇,如果能写出可以蓝屏的代码,留个后门,在游戏里看谁不爽,发个命令过去,直接蓝屏,多happy啊。但其实标准情况下,user mode application(也就是我们的游戏)是不能直接导致蓝屏的。


这里细节可以看msdn上的这些文章:user mode and kernel modeuser 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: