程序员人生 网站导航

Crush The Crash--蓝屏

栏目:综合技术时间:2016-02-28 11:34:23

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

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

甚么是蓝屏?

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

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

造成蓝屏的因素包括:

  • 硬件问题--显卡过热,内存突然松动,硬盘线断了。。。
  • 驱动问题

这些因素致使在系统内核中crash,最后就蓝屏了。

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

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

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

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

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

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

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐