美文网首页
在swfit语言堆栈中的globalinit_33_XXXXXX

在swfit语言堆栈中的globalinit_33_XXXXXX

作者: 差不多303 | 来源:发表于2020-01-03 16:10 被阅读0次

背景

在处理线上崩溃问题时经常会碰到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变量的个数从func0func1依次向下排列。

处理

在xcode的build日志中找到.o文件所在的位置,在相应的目录下运行

  nm *.o > /tmp/bbb

然后用文本编辑器打开/tmp/bbb,查找到对应globalinit_33_XXXXXX再向上找就能找到对应的文件,然后再利用第几个函数的信息就能找到对应的源代码。

相关文章

  • 在swfit语言堆栈中的globalinit_33_XXXXXX

    背景 在处理线上崩溃问题时经常会碰到globalinit_33_XXXXXX的堆栈,怎么通过这个堆栈定位到对应的源...

  • Go 堆栈的理解

    在讲Go的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈...

  • 一分钟读书俱乐部(四十二):《区块链技术驱动金融》执行一个脚本

    原文精选:在堆栈语言里执行一个脚本,我们只需要一个堆栈来垒积数据,不需要分配任何内存与变量。因此,堆栈语言中计算相...

  • [译]Swift 3.0中不安全的世界

    原文链接 就像大多数现在的变成语言一样,在 Swfit 中你就像生活在一个幸福的世界中,这里的内存被额外的部分所管...

  • iOS Swift #pragma mark 表示方法

    在swift中不支持#pragma mark,swfit中用 // MARK: 说明

  • Swift 工程中添加 Objective-C文件

    概述 今天向 Swfit 工程中添加 Objective-C文件,记录下具体的步骤。第一次向 Swfit 工程中...

  • Swift 3.0 中不安全的世界

    就像大多数现在的变成语言一样,在 Swfit 中你就像生活在一个幸福的世界中,这里的内存被额外的部分所管理,而像这...

  • 数据结构和算法(三) - 栈

    堆栈数据结构在概念上与物理的堆栈相同。将元素添加到堆栈时,将其放在堆栈顶部。从堆栈中删除元素时,始终会删除最顶层的...

  • 堆栈(C语言)

    堆栈(顺序存储)数组方式 一个有界数组存储两个堆栈 堆栈(链式存储) 中缀表达式如何转换为后缀表达式从头到尾读取中...

  • go内存管理

    1. Go 内存的划分 强烈推荐参考链接 在讲Go的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈...

网友评论

      本文标题:在swfit语言堆栈中的globalinit_33_XXXXXX

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