标签:时代 通过 cab 影响 window orm get 真心 org
问题背景
游戏上线之后,搜集到的奔溃列表里面列表存在大量的显卡驱动异常崩溃,window在vista之后,将显卡驱动模型从Xpdm改为了WDDM。 WDDM的说明详见百度百科,其中最主要的变更如下:
“在WindowsXP时代有20%的系统蓝屏故障是显卡驱动问题造成的。WDDM在技术水平上有两个组件:一个内核模式驱动程序(KMD)和一个执行大部分密集计算的用户模式驱动程序。新版WDDM模型已将代码的大部分移出了内核模式。由于与显示相关的操作只在用户模式下完成,所以大大提高了系统稳定性。”
直白的说,就是将显卡以前驱动容易崩溃的部分从Kernel层移到了用户层,要崩溃就崩溃吧,反正不会蓝屏。 这是个挺程序员化的思维,因为我们经常严重bug解不掉的时候就想办法把他变成一个一般的bug。其实这个原本也没什么问题,但是我感觉官方对这些用户层的崩溃解决的速断远远低于以前(会导致蓝屏的时候),一般的bug解决总是这么慢。
言归正传,厂商官网提供了驱动对应的二进制文件,这些是分析崩溃必须的。
AMD: https://download.amd.com/dir/bin
NVIDIA: https://driver-symbols.nvidia.com/
Intel: https://software.intel.com/sites/downloads/symbols/ …
Microsoft: https://msdl.microsoft.com/download/symbols …
Chrome: …https://chromium-browser-symsrv.commondatastorage.googleapis.com
NVIDIA官网里面说只提供前三年驱动的binaries,不提供任何的pdb文件。官网这段话解释了为何他们要提供这些二进制文件,在不同的机器上会有不同的驱动版本,如果我们拿到一个dump,有可能由于没有必要的组件而无法回溯堆栈,所以NV提供了响应驱动程序的二进制文件。
了解到这些之后,就可以拿到外网上报的崩溃文件,去尝试分析问题的本意源(兼容性,API使用错误等),看看能否找到一些蛛丝马迹。
分析过程
1、首先采用windbg,加载驱动的symbols,看看堆栈,没看出什么更多的信息,symbol对我们调试的帮助是什么,为什么NVIDIA要提供symbols.
2、lm 查看系统信息,看到nvwgf2umx.dll 的symbol并没用被加载,这个dll的类型是export symbol.
symbol类型的描述可以从文档里面看到,export表示windbg没找到匹配的symbol,
lmv可以看到更多的信息
3、直接看不到相关的信息,只能google了。Nvidia的官网论坛有这样一个帖子,遇到的情况和我们类似。
Is this a driver problem or a game problem?
官方人员:定位问题是硬件的问题,建议玩家利用memtest做内存检测;除此之外,他还带了一些常见的显卡驱动问题的Q&&A。
How to provide valuable feedback to NVIDIA
How to enable NVIDIA Graphics Driver and GeForce Experience installer logging
Wagnard Tools (DDU,GMP,TDR Manupulator)-(Updated 09/19/14)
Fix for Control Panel not saving settings
How to make the NVCP display in English
PASCAL WARNING: Bundled and Cheap PCI-E Riser cables can cause decoder corruption and TDR‘s
在Nvidia的官方论坛,我用nvwgf2umx.dll crash做为关键字,搜了一下,出现了大量的crash。
官网强烈推荐了一遍文章,Stack-walking主要讲了在堆栈损坏的情况下如何利用PE文件中的unwind info去重建堆栈,的确是一篇很好讲述调试机器的文章,也算是意外的收货吧。
官网给出了可能原因:
a) 显卡温度过高: 这类问题玩家可以通过GPUZ和HWMonitor进行监控,确认是否有类似的情况存在。
b) 内存故障: 可以通过memtest进行检测,看看是否存这种case.
c) driver 安装异常,这类倒是可以通过一些工具去进行解决。玩家升级显卡驱动之后出现问题,可以尝试用DDU(Display Driver Uninstaller)来清理对应的驱动,DDU是一款免费的工具,可以用来卸载老的驱动,然后安装指定版本。 个人体验下来,这个工具是真心牛逼,不只有显卡驱动,音频、windows的其他驱动都可以用这个进行处理。
Recommended usage:
-You MUST disconnect your internet or completely block Windows Update when running DDU until you have re-installed your new drivers.
-DDU should be used when having a problem uninstalling / installing a driver or when switching GPU brand.
-DDU should not be used every time you install a new driver unless you know what you are doing.
-DDU will not work on network drive. Please install in a local drive (C:, D: or else).
-The tool can be used in Normal mode but for absolute stability when using DDU, Safemode is always the best.
-If you are using DDU in normal mode, Clean, reboot, clean again, reboot.
-Make a backup or a system restore (but it should normally be pretty safe).
-It is best to exclude the DDU folder completely from any security software to avoid issues.
DDU使用步骤:
1)开机按F8进入安全模式;
2)禁用网络;
3)然后清理驱动程序;
4)官网下载驱动进行安装;
还有另外一款工具DriverDR,DriverDR 一款很好的用来升级驱动的工具,工具是好工具,但是需要花钱, 有钱的可以体验下,我等屌丝就不用了。
最后总结下,官网更多的是从硬件和驱动去解决这类的崩溃,没有提出游戏内容导致这类问题的解决方案,那该如何是好呢?
问题貌似无解,那其他产品类似的crash率如何呢?看了一圈,貌似都是DX9的游戏居多,dx11的不多,没办法评估显卡驱动崩溃的影响面。
对于外网的这些显卡驱动崩溃 ,按照目前的信息,估计也得不出什么结论。在有限的时间内继续深入调查的话,付出收益比并不高,还不如去做其他的事情呢。所以我决定先先搜集下面的信息,然后再内网进行重现,然后看情况进行针对性的处理。
a) 出现这种崩溃的都是哪些玩家?
b) 他们的画面设置是什么?
c) 出现这类问题的显卡是什么? 驱动版本是什么?
d) 出现问题玩家的操作系统是什么?
c) 这类crash都是发生在游戏当中的什么阶段呢?
结论
最近把发生这里错误的机器信息都上报上来,做了一些简单的分析,有如下结论:
1、出现该问题的机器在视频画质的选择上并没有明显的共性,推翻了我原先认为的高画质的机器更容易出现此类crash;
2、驱动版本越新,越容易出现问题,这点倒可以由数据印证,某个版本的驱动会更容易出现问题,下个版本会变得更好;
哈哈,上面两点对我的修复工作没有任何的帮助,目前还在思考中,下面的工作还是从项目本身入手,搭建一系列的测试环境,在各个环境下面修复 DX 的一些告警,然后再看看数据是否有变化。
如果有同行正在研究类似的问题,有相关经验的话,可以留言讨论 或联系QQ 2403798112. 暗号: KHacker.
标签:时代 通过 cab 影响 window orm get 真心 org
原文地址:https://www.cnblogs.com/khacker/p/10460473.html