这两天在几家客户那里介绍微软的Windows Azure,有几个精彩的demo我还录制了视频。没成想迅雷播放器在我的Windows 10预览版上似乎得了水土不服之症,每次打开视频,最起码要卡10~15秒钟才正常开始播放,让我有一种很强的挫败感。
作为一名IT技术人员,自然不能无视这个故障,也不能简单地重装其他播放器。----深入其虎穴,捉得虎子,才是硬道理。
Windows工程师手边最好的排错工具,当然是Sysinternals Suite。有性能问题,首先得找Process Monitor,所以赶紧用来抓迅雷hang的时候,背后都发生了什么。
结果很令人沮丧,检查的结果,除了发现以下大量访问CodePage注册表键值的行为,并没有发现太多有用的信息。
那就只能用Procdump来抓取迅雷hang时背后所发生的事情了。Procdump可以基于特定事件自动生成进程的dump文件,例如在进程占用指定数量的CPU、或者占用指定数量的内存时自动抓dump。在这里我们指定让Procdump在迅雷hang住的时候自动抓dump:
procdump.exe" -h -n 2 xmp xmp.dump
其中的-h是发现进程hang时可以自动抓dump,默认是5秒。-n是指定抓多少个dump,xmp是迅雷的进程名称,而最后是dump文件名称。
很快就可以生成dump文件,然后用Windbg将其打开进行调试,一开始会提示很多dll等文件找不到符号文件,这是正常的,微软的符号服务器不可能有迅雷的符号文件。从以下的线程堆栈可以看出,当XmpUtility中的某个函数调用ieframe!IEGetProtectedModeCookie函数时发生了问题。
接下来可以看到Windbg提示ieframe!IEGetProtectedModeCookie的问题。盆盆推断这是因为迅雷播放器需要调用IE框架显示所谓的片库等内容,由于代码有问题,和Windows 10的IE保护模式有冲突。
要临时解决这个问题,很简单,只需禁用IE保护模式,或者把迅雷的网站加入到可信任站点(可信任站点默认禁用IE保护模式)。但是需要注意,禁用IE保护模式,会提高IE的安全风险!
所以最好的方法,是迅雷工程师能尽快修改代码,以便能和IE保护模式兼容。我已经给迅雷发了微博消息,但是到今天为止已经2个月,还没得到回复。
如果您觉得华来四还不错,那就微信扫描以下的二维码关注吧。也可以直接添加微信公众号:sysinternal。