刚入行,所有的机器的硬件都是自己购买组装的。抱着一份期待和忐忑,是不是最初都是这样呢?我自己用三角铁定制了一个机架,电脑完成所有的组装和系统后,开始正式上架测试游戏。于是就有了这一篇《蓝屏排错及远程和辅助软件的甄选》,经验总结式的流水账文章。文字组织能力有限,请谅解,也希望文中的各种细节能够共同探讨或有所帮助。
先从最底层的硬件说起,大部分新的主板或是CPU已经不支持XP系统了,单从内存需求上来说就不太适合,所以我采用的系统环境是Win7 x64。我做的项目属于半手动,所以只配备了2台显示,一台做监控,一台做主操作。必备的软件就需要远程监控和辅助工具这两样东西。关于远程监控软件,网上比较多,良莠不齐。有支持内网穿透的,如向日葵。有主动连接和被动连接式的,如经典的灰鸽子和Radmin。
下面说说测试游戏时发生的事。机器正常点亮,监控正常,辅助正常。大约15分钟后,在监控显示器里发现远程画面全部卡死,远程重连不上。回过头检查机器,发现硬盘灯处于常亮(读写状态中),等到拿VGA线接到显示器时,发现已经进入系统,并提示Windows已从异常关机中恢复(如下图1)。
如果是那种软件bug的错误,那就一定可以错误还原,但是我又不想浪费时间(不知道当时异常关机的错误提示),所以选择使用微软的WinDbg对错误文件进行分析(WinDbg是在windows平台下,强大的用户态和内核态调试工具。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃等原因)。
1、点击查看问题详细信息找到dmp文件路径(如下图2)。
2、使用WinDbg打开dmp文件(File -> Open Crash Dump)(如下图3)。
3、找到可能的错误提示。(如下图4)
4、搜索igdkmd64.sys后发现是Intel 核心显卡的问题。
到这里我想会不会是核心显卡驱动不是最新的缘故,遂下载微软认证的 WHQL核心显卡驱动。更新重启,没有再次出现蓝屏(蓝屏前安装的是主板光盘里驱动,当时的考虑是主板厂家的驱动对硬件是不是支持的更好)。更新显卡驱动后,这次出现的问题是远程监控画面卡死。返回单独外接显示器的那台,启动任务管理器发现物理内存使用率97%,应该是远程监控无法再获取内存资源返回画面了。主要内存占用的是两个进程,游戏和svchost.exe(网络传输)。
分析一下,机器要用到网络的主要软件是游戏和远程,那么游戏可以排除。这里简单介绍一下远程控制画面传输的一些原理,我所知道的大致有两种,为快照(整个屏幕图像,整张传输,速度慢,网络要求高)和图像差异化(前一张图像和后一张图像差别,只传输差别部分,速度快但有前提)。回到我的问题上,我测试时使用的远程监控是属于图像差异化,那么我就需要调整每秒的传输张数就可以。这时软件和软件之间的功能和性能的差异就出来了,如何选择好的远程监控也就有了参考。
此时,svchost.exe进程的问题解决了,可依旧还是卡,原因是游戏的进程运行的时间越久内存占用的越高,直至崩溃。我猜测的原因是远程监控为了提高算法(受Aero主题的透视,边框渐变影响,Basic也有边框渐变但稍好),将系统主题临时更改成Basic导致的(不兼容)。
将主题默认更改成Basic后问题解决,原以为就此解决,事实证明,还没有。
辅助,因为更改成默认的Basic主题后,找图失效。虽说Dx游戏界面的特殊,但没想到会因为更改Basic主题后出现,如下图5(登录界面,只有两条黑色长方形?是的,显示器显示正常,但远程监控那边收到的图片是如此,这就是找图失效的原因)
更改辅助的部分代码后,一切恢复正常。
总结:真正上机测试和当时单机模拟的想法有出路和不足。有许多问题网络是没有答案的,图像差异化的远程监控不一定是最好的。有时思考和解决问题的方式需要举一反三和两极化。