最近项目进入测试阶段PC版本已經没有任何问题。进入安卓测试阶段然而,意想不到的是——闪退!闪退!闪退!
网上找了很多解决方案使用软件跟踪,打印日志檢查是否有空指针等等。
然后就开始了漫长的修改——打包——测试。。一下熬到了半夜两点多、、、最终定位到了结构体
接收服務器信息,我知道的有两种方法
第一种,是通过结构体把数据包去掉包头,然后转换成与服务器打包数据时相同数据类型的结构体通过结构体获取包里的数据;
第二,去掉包头按照服务器的结构体,依次读取相应长度的数据比如,int读4字节
两种方法都各有利弊,轉换结构体可以让我们更直观看到包内数据的真面目。因为我们服务器端是C++写的在数据传输的时候,我和服务器商量好就1字节对齐。测试过程中感觉C和C#貌似都有严格的数据对齐的限制。测试的时候我们发现,当数据包长度能被4整除的时候这个包就没有问题,否則就会闪退另外,C#在定义结构体的时候加了StructLayout这个限定声明,这个声明是什么东西其实我并没搞懂,只是看过大神在声明结构体的时候加上过逼格很高,就效仿了、、、、嘎嘎嘎、、、
那么接下来就开始测试字节对齐的BUG,使用了第二种方法直接从包内读取相应长喥,修改、、、、打包、、、测试、、、、通过!!!!!!MMP终于给搞定了所以说,使用第二种方式虽然不能直观的看到数据真面目,但是会避免字节对齐的烦恼
那么究竟是不是structlayout这个东东搞的鬼呢?
看这个博客貌似真的是这个家伙搞的鬼,但有待测试明天测一下。
通过这个文章记录下这个问题以后再遇到就不迷茫了,也希望给朋友们一个处理闪退的方向当然,闪退BUG有很多种能测出来一种是┅种!~!!!