cesium莫名其妙报render normalize错误问题解决

  这又是一次依靠直觉解决bug的经历,由于不会吹牛皮,所以一直从事一线开发,bug排查,扫坑工作,名副其实的搬砖一枚,哈哈,虽然刚开始很累,说出来也没觉得高大上,感觉技术也没什么提升,但是正是由于没多少人愿意做,反而有个*自在没多少人指手划脚的环境,时间久了,倒是内心乐意起来,日积月累,竟然形成了一种排查bug的直觉,或者说是第六感吧,已经多次从中受益,起到事半功倍的效果。本文提到的bug即为其中之一,错误如下图所示:
cesium莫名其妙报render normalize错误问题解决
  从表面上来看这是一个参数错误带来normalize(归一化)操作无法进行下去的错误,源码跟进去看确认无疑:
cesium莫名其妙报render normalize错误问题解决
  这里result是各维度值都为NaN的错误笛卡尔坐标,造成这个错误的原因有很多,从代码上看应该是传进来的参数就是不对的,如果往前跟几步函数会发现在tileset的transform属性就是各维度都为0的Matrix3矩阵。按照以往排查错误的惯例,到这里就面临复杂的局面了,传统方法是跟进每个stack函数中找到问题根源,找到具体是在哪里传入了错误值,这种排错方法可参考我的另一篇博客:https://blog.****.net/wqy248/article/details/99592961

  但是直觉告诉我不能这样找下去了,理由:1.多处都有这个问题 2.在另一个自测试代码中没有这个问题 3.注释掉很多项目中跟地图操作相关的业务代码问题依然存在。 原以为有可能是内存不够引起,但是以上理由中的第二个证明不是这个原因,比较了自测试代码和项目代码,将很多项目代码中相关的地图操作代码全部删除保证和自测试代码没有区别问题仍然存在,说明很有可能不是项目的业务代码造成,项目运行过程中多处都出现这个问题,且出现无规律偶然现象,则说明很有可能是配置问题,我检查了配置,发现项目代码和自测试代码对cesium的引入确实不一样,自测试代码是html静态引入,而项目代码是webpack打包方式,为了验证,新建一个工程将webpack打包方式引入代码全部删除,然后改用静态引入,也就是把cesium中build和Apps文件夹整个拷贝到项目文件夹中,然后在index.html中引入script和style:
cesium莫名其妙报render normalize错误问题解决

cesium莫名其妙报render normalize错误问题解决

  然后将项目代码中所有关于cesium引入的import代码全部删除,重启程序,运行,没有报错,完美解决。

  自己也没想到会那么快解决,因为要是没有直觉判断准确的话,跟进源码排查需要很高的代码理解能力和时间,所以各位小伙伴别气馁,平时多踩踩坑还是很有好处的哦:)