Crush The Crash--藍(lán)屏
來源:程序員人生 發(fā)布時間:2016-02-28 11:34:23 閱讀次數(shù):2691次
游戲玩著玩著藍(lán)屏了,這是讓很多玩家崩潰的事情,這個更讓開發(fā)者頭疼,第1次遇到時候(還得去解決)不免還有點手足無措。
在《天涯明月刀》項目中也解決了1些這個問題,這里也聊下這個。
甚么是藍(lán)屏?
藍(lán)屏英語叫法,或google它的時候叫blur screen of death,簡稱bsod。
游戲崩潰了,就直接退了,系統(tǒng)崩潰了,就是藍(lán)屏。
造成藍(lán)屏的因素包括:
-
硬件問題--顯卡過熱,內(nèi)存突然松動,硬盤線斷了。。。
-
驅(qū)動問題
這些因素致使在系統(tǒng)內(nèi)核中crash,最后就藍(lán)屏了。
游戲是不是能直接致使藍(lán)屏?
第1次遇到同事那里藍(lán)屏,我還挺好奇,如果能寫出可以藍(lán)屏的代碼,留個后門,在游戲里看誰不爽,發(fā)個命令過去,直接藍(lán)屏,多happy啊。
但其實標(biāo)準(zhǔn)情況下,user mode application(也就是我們的游戲)是不能直接致使藍(lán)屏的。
這里細(xì)節(jié)可以看msdn上的這些文章:user mode and kernel mode
user mode的application,是有自己的process,有自己的1塊virtual address,processor不能訪問其他地址(包括屬于操作系統(tǒng)內(nèi)核的地址)。
process crash也只是crash自己,不能直接crash系統(tǒng)。
但是游戲在運行的時候會調(diào)用系統(tǒng)函數(shù)等,如果游戲有安全組件,去更改了這部份的驅(qū)動,那末就有可能更改了對kernel部份的調(diào)用,影響其運行,終究致使crash。
定位
所以1旦出現(xiàn)了藍(lán)屏,我們需要了解,就不需要在游戲正常運行的代碼中去看是不是有問題,直接往會接觸到驅(qū)動,硬件和kernel調(diào)用的部份去定位便可。
藍(lán)屏的dump搜集
藍(lán)屏也是有dump的。
系統(tǒng)失敗這里,如果玩家出現(xiàn)藍(lán)屏,可以根據(jù)玩家情況,或拜托玩家在調(diào)試信息這里盡可能選擇全的信息,來獲得dump。
這里的dmp是kernel mode的,只能使用windbg來查看,visual studio看不了。
顯卡過熱
實際工作中,能接觸到最多見的,且游戲直接相干的,是顯卡過熱致使的顯卡掛了,這里會致使顯卡重啟或藍(lán)屏。
我們在游戲中盡量的利用顯卡的每份計算資源,去提升效力,讓所有組件并行最大化,在一樣的硬件下跑得更流暢,展現(xiàn)出更好的效果,但這直接也致使了散熱更利害。
加上現(xiàn)在很多JS會賣畸形顯卡--在散熱上偷工減料,跑跑LOL這類簡單游戲玩的很流暢,1旦全速運轉(zhuǎn),散熱不行,很快就掛了。
處理方法,1個是限幀,在游戲中正常限制在60fps,這個對普通mmo足夠了,這樣最少對1些特別牛的顯卡,會下降散熱,在散熱不足的情況降落低出問題的風(fēng)險。
在loading畫面的時候,下降到更低的幀數(shù),最少讓顯卡先冷1會也是好的。
1個是溫度檢測,在顯卡廠商(比如nvidia)都會有自己專有的sdk,提供接口來取得顯卡的溫度,在溫度太高的情況,做降幀降效果的處理,但是這個比較雙刃劍,1般過1百度的時候做1下還可以,但是玩家會出現(xiàn)抱怨游戲效果降落的問題。
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
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈