美文网首页程序员
什么是符号表?

什么是符号表?

作者: iOS开发之家 | 来源:发表于2019-03-21 20:38 被阅读2次

前言

iOS 开发中经常回定位 bug 通过崩溃堆栈,此时我们需要借助符号表来恢复内存地址对应代码调用信息,为了解开这个大家耳熟能详却总有人问的问题的面纱,我在 bugle 平台和一些文章中收集了相关知识整理出来,以便后续方便记忆.

本周主要内容如下

  • 什么是符号表?
  • 为什么要配置符号表?
  • dSYM文件?

什么是符号表?

符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:

<起始地址> <结束地址> <函数> [<文件名>:<行号>]

为什么要配置符号表?

为了能快速并准确地定位用户APP发生Crash的代码位置,我们可以使用符号表对APP发生Crash的程序堆栈进行解析还原

举一个例子:

image

上图是我们通过符号表来解析出来崩溃堆栈的调用

什么是dSYM文件?

iOS平台中,dSYM文件是指具有调试信息的目标文件,文件名通常为: com.公司名.dSYM。如下图所示:

image

一般都是和Xcode 工程名的 aget一样的名字

为了方便找回Crash对应的dSYM文件和还原堆栈,建议每次构建或者发布APP版本的时候,备份好dSYM文件

如何定位dSYM文件?

一般情况下,项目编译完dSYM文件跟app文件在同一个目录下,下面以XCode作为IDE详细说明定位dSYM文件

image image.png

这里用 release 模式做的测试

我们看到 和工程 target一样的名称的 .dSYM.

XCode编译后没有生成dSYM文件?

XCode在 Release编译环境下默认会生成dSYM文件,而Debug编译环境下默认不会生成

如果要在Debug对应的Xcode配置如下:

XCode -> Build Settings -> Code Generation -> Generate Debug Symbols -> Yes
XCode -> Build Settings -> Build Option -> Debug Information Format -> DWARF with dSYM File

image
image

开启Bitcode之后需要注意哪些问题?

  • 在点Upload to App Store上传到App Store服务器的时候需要声明符号文件(dSYM文件)的生成:

image
  • 在配置符号表文件之前,需要从App Store中把该版本对应的dSYM文件下载回本地,然后用符号表工具生成和上传符号表文件。

这里找回ipa版本对应的dSYM文件有两种方式

  1. 通过Xcode的归档文件找回dSYM,打开Xcode 顶部菜单栏 -> Window -> Organizer 窗口,如下图:

    image
    打开 Xcode 顶部菜单栏,选择Archive 标签:
    image
    找到发布的归档包,右键点击对应归档包,选择Show in Finder操作:
    image.png
    (https://bugly.qq.com/docs/img/symbol-ios/BitcodedSYM-4.jpg) 右键选择定位到的归档文件,选择显示包内容操作:
    image
    选择dSYMs目录,目录内即为下载到的 dSYM 文件:
    image
  2. 通过iTunes Connect找回

    image

    在“所有构件版本(All Builds)”中选择某一个版本,点“下载dSYM(Download dSYM)”下载dSYM文件.

注意:一个ArchiverdSYM文件一一对应,搞错了容易翻译不出来来源码的调用

参考如下:

Bugly iOS 符号表配置
App 启动时间:过去,现在和未来

全文完

如果你依然在编程的世界里迷茫,不知道自己的未来规划,小编给大家推荐一个IOS高级交流群:458839238 里面可以与大神一起交流并走出迷茫。小白可进群免费领取学习资料,看看前辈们是如何在编程的世界里傲然前行!
群内提供数据结构与算法、底层进阶、swift、逆向、整合面试题等免费资料
附上一份收集的各大厂面试题(附答案) ! 群文件直接获取
各大厂面试题

image

相关文章

  • iOS逆向基础03-符号表

    一.什么是符号表 我们都知道iOS可以通过符号表来恢复堆栈的调用,那么什么是符号表呢? 我们可以通过符号表来还原类...

  • Unity BuglySDK符号表接入

    什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示: 为什么要配置符号表? 为了能...

  • dsym

    iOS开发时经常需要接触符号表的概念,本文主要分享符号表相关知识,包括什么是符号表,符号表的作用,符号表的产生过程...

  • Bugly网站中关于dSYM文件脚本自动上传几个注意点记录

    什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示: <起始地址> <结束地址> ...

  • Bugly iOS 符号表配置

    什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示: <起始地址> <结束地址> ...

  • iOS Crash 常用分析方法

    崩溃分析 崩溃日志(crash log) 根据符号表来监测崩溃位置 什么是符号表符号表就是指在Xcode项目编译后...

  • Bugly iOS 符号表配置

    一:介绍 1、什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。 符号表元素如下所示: <起始地址>...

  • Bugly 上传 符号表(iOS)

    介绍 什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:<起始地址> <结束地址...

  • 【iOS】Bugly 符号表配置

    1. 什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:<起始地址> <结束地址...

  • 什么是符号表?

    前言 iOS 开发中经常回定位 bug 通过崩溃堆栈,此时我们需要借助符号表来恢复内存地址对应代码调用信息,为了解...

网友评论

    本文标题:什么是符号表?

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