美文网首页工作博客
Debug记录:iOS10在Appdelete的didFinis

Debug记录:iOS10在Appdelete的didFinis

作者: abs_ | 来源:发表于2019-03-01 11:10 被阅读2次

    问题如题
    首先得到的报错信息如下:

    WX20190301-104814@2x.png

    这个报错的意思是向一个已经释放的对象发送消息的问题。解决这类问题的做法从内存地址解析得到该地址的堆栈信息。

    1. 确保开启了Zombie Objects 和 malloc track


      WX20190301-104614@2x.png
    2. 打开活动监视器找到你的项目所在pid(进程id) ,一般输入项目名就能找到你的pid

    3. 打开终端,输入:

      # 6220代表你的pid 
      # 0x110cec090是内存地址
      sudo malloc_history 6220 0x110cec090
      

      很不幸,我没有通过这种方式找到有用的信息


      WX20190301-105149@2x.png

      然后我开始观察:

      -[UIWindowLayer retain]: message sent to deallocated instance 0x110cec090

      很容易想到可能是某个window被提前释放导致问题的

    于是我重新运行,在Appdelegate方法内打印所有window的信息,我得到的信息如下:

    WX20190301-110839@2x.png

    从这些信息可以看到 WXWindow 的内存地址是0x110dc7490
    随后的崩溃信息如下:

    **-[UIWindowLayer retain]: message sent to deallocated instance 0x110dc7490
    

    问题已经很明显了,就是WXWindow类这个对象的提前释放导致出现崩溃的。这是weex调试时在顶部的一个小蓝条。很遗憾。weex框架内部代码无法修改。

    最后验证:我移除了与weex调试相关的代码之后,发现一切正常,最后复原代码重新测试,发现又出现了崩溃。于是我认为我的结论是正确的。

    相关文章

      网友评论

        本文标题:Debug记录:iOS10在Appdelete的didFinis

        本文链接:https://www.haomeiwen.com/subject/okoruqtx.html