背景
在处理线上崩溃问题时经常会碰到globalinit_33_XXXXXX
的堆栈,怎么通过这个堆栈定位到对应的源代码呢?通过各种百度,google没有找到任何高手的指点,于是自己写demo各种尝试,自己摸索出一套方案,在这里记录下来。由于是自己摸索的,而且没有找到理论支持,所以希望高手能在留言中不吝赐教。
规律
通过demo发现如下规律: image.png- 对static修饰的class变量(var或let),进行闭包初始化,就会自动产生一条
globalinit_33_XXXXXX
函数。 - 在
globalinit_33_XXXXXX
中的比如globalinit_33_6DBB546EC00EF1AACB2B194F624F3255_func2中的6DBB546EC00EF1AACB2B194F624F3255和一个文件一一对应,只有修改了文件名称,这个值才会变化,修改了文件位置,文件中的类名称等操作都不会引起这个值变化。然后func2这部分,是按照文件中的static变量的个数从func0、func1依次向下排列。
处理
在xcode的build日志中找到.o文件所在的位置,在相应的目录下运行
nm *.o > /tmp/bbb
然后用文本编辑器打开/tmp/bbb,查找到对应globalinit_33_XXXXXX
再向上找就能找到对应的文件,然后再利用第几个函数的信息就能找到对应的源代码。
网友评论