最近在用百度地图SDK做定位功能,遇到了一个会crash的bug。经过长时间的调试,终于确定并解决了问题。以下是这次问题总结的一些比较重要的东西。
- 遇到了EXC_BREAKPOINT(code = 1,subcode = ...)这样的崩溃断点,首先应该启用僵尸模式查找具体崩溃原因。
- 当僵尸模式查找不到的时候,应该可以确定是静态库内部出现的崩溃。这时候就要仔细查看自己的代码,找到使用第三方库不当的地方。(最好在刚开始使用的时候多读官方文档和官方demo,避免出现这种错误。)
- 由于鹰眼的开始和停止上传位置的方法都是在新开的线程中执行的,我这里就是遇到了两个方法同时执行,导致开始方法的内部调用了已经被停止方法释放的对象。所以出现了崩溃。
- 发生崩溃的操作时,应该是只调用开始上传的方法的。所以就通过打断点的方式找到调用了stop的代码。
- 然后发现是在监控程序进入后台的方法中调用的。这时候问题又来了:这个方法是通过通知中心监控home键挂起程序时调用的,为什么每次进入界面都会调用这个方法呢?
- 最后确定,是在询问定位权限的时候,系统也发送了一个程序挂起的通知。
网友评论