带你撸出一手好代码
一个BUG引发的思考

一个BUG:来自一个WPF程序,当ListView内容横向溢出时,水平滚动条不出现。


未命名图片.png


正常状态下会出现标红处的滚动条,而的程序运行后滚动条却不出现。这非常令人费解,因为ListView控件默认是具备水平滚动的能力的。

我尝试使用各种办法解决此问题,比如说强行设置显示滚动条的属性、设置每一列的宽度, 重新定义ListView的模板结构,搜索引擎换了好几个、搜索结果翻N页、以不同的文字描述问题进行关键字搜索,尝试了N批方案, 然而问题依旧存在。

正当气馁到绝望的时候,我发现了问题所在。 原来滚动条不出现并非ListView本身问题引起的,而是因为之前我在ListView外面包裹了一层WrapPannel,而ListView又被设置了一个高度,因为ListView的高度高于外层的WrapPannel,导致内层的ListView的滚动条被遮住了, 其实就相当于css中的overflow:hidden;的效果。 解决问题的方法很简单,只要将ListView的高度减少20个单位就可以了。

当发现问题的真相时,我的内心是崩溃的。 首先,之前费劲心思做的追踪与问题的真相完全不是一个方向,导致无畏的浪费了几小时的精力。其次,掉的这个坑是自己之前不小心挖了,搬石头砸自己的脚,自己坑自己。

其实在代码生涯中,类似这种代码中的线索与造成问题的原因毫无关联的BUG碰到了好多次, 每次都要花几小时甚至一天的时间去排查问题,结果明了时才发现,原来之前做的都是无用功,真正对发现问题有助益的仅仅就最后那几秒钟而已,而且这种问题通常不是由于程序本身的逻辑问题引起的,而是来自与某些与问题本身没有关系的意外。

写着篇文章是为了让自己加深影响,当花了很长时间还是无法寻找到造成BUG的原因时,就需要考虑跳出当前追踪问题思维框架了,也许形成BUG的原因和当前脑子中思考的解决问题的思路没有一丝相关性,从更高层面思考问题的所在或者从不同的角度切入寻找线索可能能更快的解决问题。


作者:陈大侠
日期:2018-02-26

留言(0条)

我要发表留言

您的大名 选填
电子邮箱 选填

欢迎关注微信公众号 「带你撸出一手好代码」

首页    GitHub 知乎 豆瓣 博客园