让人撇嘴的崩溃和让人叹服的可调试性

格友有个Windows上的性能问题请求帮忙,我让他使用WPT(Windows Performance Toolkit)捕捉现场情况,然后把ETL文件发给我。

睡过午觉,看外面仍在下雨。坐到电脑前,想起了格友的ETL文件。搜索wpa.exe(WPA是Windows Performance Analyzer的简称),搜到几个结果,都是以前安装的。

不支持该请求

启动wpa,选择etl文件,加载过程中,WPA报告下面这样的错误(Trace processing failed)。点击确定后就退出了。

错误对话框中有个提示:不支持该请求。根据经验,多半是我的WPA太老了。

安装新版本

上微软官网,下载SDK安装程序,选择安装Windows Performance Toolkit,很快就安装好了新版本。

新版本装好后,启动wpa,界面果然和以前不一样,布局更漂亮了,右侧还多了个“欢迎使用的新的启动器!”。有更新代表着在进步,看来微软还是有人在坚持做Windows的(^_^)。

新的界面的下方还多了个进度条,在显示一些操作的名字,比如loading plugin xxx。正当我一边欣赏WPA的新界面,一边为微软同行坚持改进Windows感动的时候, WPA弹出一个对话框,对话框的标题赫然写着:致命的异常。这个致命异常仿佛像一盆冷水泼到我的头顶,让我的情绪瞬间扭转了180度。

我睁大眼睛,仔细看对话框。读上面的信息:检测到不可恢复的错误:无法加载perfcore.dll。

然后询问是否通过“反馈通道”发通知?但是无论选“是”还是“否”,结果都是WPA残忍退出了。

根据多年的经验,新的WPA崩溃了。欸,怎么这么不稳定呢?一启动就崩溃了,还没等我打开文件。这软件测试过么?这质量还能代表微软的水平么?

换个机器再试

对于这样的崩溃,可能是因为我本子上的windows太老了,它多次要自动升级,都被我拒绝了。

为此,我特意把安装程序复制到一个新的本子上,重复上面的步骤,结果还是同样的症状,致命的异常,崩溃。

上调试器

怎么办呢?就此放弃了么?

看一眼窗外,雨还在下。转回头,从大脑皮层深处钻出了沉睡许久的一句话,又土又歪:下雨天打孩子,闲着也是闲着。

对的,闲着也是闲着,上调试器。

再次启动wpa.exe,异常对话框出现后点击“否”,经典的JIT调试机制开始工作(详见《软件调试》卷2),名为“选择实时调试程序”的对话框弹出。

点击JIT调试对话框的确定按钮,VS IDE被启动,接管崩溃的WPA。我估计VS要忙一会,就切到微信界面,看了几条消息。

过了大约一分钟,当我切回VS时,我再次被眼前的一幕感动了。

VS不仅显示出了完美的调用栈,还把出问题的源代码呈现出来。这个源文件看起来是自动从大洋彼岸下载的。我特意“打开所在的文件夹”,看了一眼刚刚下载好的文件,对它说:“你好啊,美国来的客人,上海欢迎你!”

浏览崩溃现场的源代码,确实是在加载库文件,库文件的路径是通过两个变量动态拼接起来的。

string text = Path.Combine(XPerfProcessingSource.XPerfAddInDirectory, FileName);intPtr = NativeMethods.LoadLibrary(text);if (intPtr == IntPtr.Zero){  throw new FileNotFoundException("Unable to load " + FileName, text);}

更难得的是,把鼠标移到变量上,立刻显示出了变量的值,XPerfProcessingSource.XPerfAddInDirectory的值确实是我安装WPT的路径。

而FileName的值就是错误对话框里提到的perfcore.dll。

如此看来就是因为我的WPT目录缺少文件啊。

使用文件搜索工具搜索,的确没有。

这时,我想到新下载的WPT安装包有很多个安装文件,我刚才安装的是WPTx64 (DesktoEditions)-x64_en_us.msi。我尝试双击另一个安装包:WPTx64(OnecoreUAP)-x64_en-us.msi。

安装好之后,再搜perfcore.dll,果然有了。

再次运行wpa,问题消失了。

回过头来看,这个非常明显和让人撇嘴的崩溃是和安装程序有关的。对于这个问题,一上调试器就水落石出了。这个问题再次证明了调试技术的重要性,应格友们的提议,《全栈调试实战营之二线拍案惊奇》正在招募中,希望深耕调试技术的小伙伴请点击链接查看详情。

Image

(写文章很辛苦,恳请各位读者点击“在看”,欢迎转发)

*************************************************

正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生

扫描下方二维码或者在微信中搜索“盛格塾”小程序,可以阅读更多文章和有声读物

Image

也欢迎关注格友公众号

Image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值