Bugly iOS 符号表配置

什么是符号表?

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

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

为什么要配置符号表?

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

举一个例子:

Bugly提供了自动和手动两种方法配置iOS符号表。

自动配置:XCode + sh脚本

自动配置请首先下载和解压自动配置符号表工具包,然后选择上传方式并配置Xcode的编译执行脚本。

上传方式

使用脚本自动配置支持两种上传方式:

方式一:直接上传dSYM文件(默认方式 )

方式二:提取dSYM文件的符号表文件并上传

其中,使用方式二需要额外操作以下几步:

下载符号表提取工具依赖的Java运行环境(JRE或JDK版本需要>=1.6)

把工具包buglySymbolIOS.jar保存在用户主目录(Home)的bin目录下(没有bin文件夹,请自行创建):

配置Xcode编译执行脚本

在Xcode工程对应Target的Build Phases中新增Run Scrpit Phase

打开工具包中的dSYM_upload.sh,复制所有内容,在新增的Run Scrpit Phase中粘贴修改新增的Run Scrpit中的为您的App ID,为您的App Key,为App的Bundle Id

脚本默认在Debug模式及模拟器编译情况下不会上传符号表,在需要上传的时候,请修改下列选项

Debug模式编译是否上传,1=上传 0=不上传,默认不上传

UPLOAD_DEBUG_SYMBOLS=0

模拟器编译是否上传,1=上传 0=不上传,默认不上传

UPLOAD_SIMULATOR_SYMBOLS=0

至此,自动上传符号表脚本配置完毕,Bugly 会在每次 Xcode 工程编译后自动完成符号表配置工作。

手动配置

手动配置的流程如下:

下载最新版Bugly iOS符号表工具,其中工具包中包括:

符号表工具JAR包(buglySymboliOS.jar)

Windows的脚本(buglySymboliOS.bat)

Shell脚本(buglySymboliOS.sh)

默认符号表配置文件(settings.txt)

符号表工具iOS版-使用指南

根据Crash的UUID定位dSYM文件

使用工具生成符号表文件(zip文件)

在页面上传符号表文件

其他说明

Bugly iOS符号表工具2.3.0及以上版本增加了上传功能,2.5.0及以上版本支持dSYM文件的上传;

定位dSYM文件的方法和工具的使用方法请参考:“符号表工具iOS版-使用指南”。

符号表上传接口

Bugly提供了上传符号表的HTTP和HTTPS(请使用POST方式上传)接口。

HTTP接口

iOS符号表接口:http://bugly.qq.com/upload/dsym

参数说明

上传接口的参数说明如下:

属性 说明

pid 平台ID,固定为2

app App ID

key App Key

bid 包名(Package)

ver 版本号(Version Name)

n 符号表文件名)

其中包名、版本号和符号表文件名需要做URL Encode。

Content‐Type:

上传.zip 文件:application/zip

例子:使用Curl上传

使用Curl工具来上传的例子如下:

curl -L --header "Content-Type: application/zip" --data-binary @symbol.zip

'http://bugly.qq.com/upload/dsym?pid=2&app=xxxxxx&key=xxxxxx&bid=com.demo.test&ver=1.0.1&n=symbol.zip' --verbose

HTTPS接口

HTTPS接口:https://api.bugly.qq.com/openapi/file/upload/symbol

HTTPS接口支持上传dSYM文件(需要压缩成Zip文件)和符号表文件(Symbol)。

参数说明

上传接口的参数说明如下:

属性 说明

api_version API版本,固定为1

app_id App ID

app_key App Key

symbolType 符号表类型,iOS为2

bundleId 包名(Package)

productVersion 版本号(Version Name)

fileName 符号表文件名

file 符号表文件

其中包名、版本号和符号表文件名需要做URL Encode。

例子:使用Curl上传

使用Curl工具来上传的例子如下:

上传dSYM文件

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=xxxxxx&app_id=xxxxxx" --form "api_version=1" --form "app_id=xxxxxx" --form "app_key=xxxxxx" --form "symbolType=1"  --form "bundleId=com.demo.test" --form "productVersion=1.0" --form "channel=xxx" --form "fileName=app.dSYM.zip" --form "file=@app.dSYM.zip" --verbose

上传符号表文件(Symbol文件)

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=xxxxxx&app_id=xxxxxx" --form "api_version=1" --form "app_id=xxxxxx" --form "app_key=xxxxxx" --form "symbolType=2"  --form "bundleId=com.demo.test" --form "productVersion=1.0" --form "fileName=symbol.zip" --form "file=@symbol.zip" --verbose

dSYM文件

什么是dSYM文件?

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

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

如何定位dSYM文件?

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

-> 进入XCode;

-> 打开工程(已编译过);

-> 在左栏找到“Product”项;

-> 鼠标右键点击编译生成的“xxx.app”;

-> 点击“Show in Finder”;

如下图所示:

如果有多个dSYM文件,可以在使用工具时指定输入为dSYM文件所在的目录或者工程目录。

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

XCode Release编译默认会生成dSYM文件,而Debug编译默认不会生成,对应的Xcode配置如下:

XCode -> Build Settings -> Code Generation -> Generate Debug Symbols -> Yes

XCode -> Build Settings -> Build Option -> Debug Information Format -> DWARF with dSYM File

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

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

在配置符号表文件之前,需要从App Store中把该版本对应的dSYM文件下载回本地(参考“如何找回已发布到App Store的App对应的dSYM文件?”),然后用符号表工具生成和上传符号表文件。

不需要配置自动生成符号表的脚本了,也不要用本地生成的dSYM文件来生成符号表文件,因为本地编译生成的dSYM文件的符号表信息都被隐藏了。如果用本地编译生成的dSYM文件生成符号表文件并配置到Bugly平台之后,还原出来的结果将是类似于“__hiden#XXX”这样的符号。

如何判断dSYM文件是否与Crash的UUID匹配?

Bugly还原Crash堆栈时,需要根据UUID来匹配符号表文件,因此只有上传的符号表文件的UUID与Crash对应APP的UUID一致时,才能准确地对堆栈进行还原。

查看符号表文件的UUID(“如何查看dSYM文件的UUID?”)

查看Crash对应的APP的UUID

Bugly v1.0页面

崩溃 ---> Crash issue ---> dSYM UUID

Bugly v2.0页面

崩溃分析 ---> Crash issue ---> 符号表 ---> UUID

如何查看dSYM文件的UUID?通过命令查看UUIDxcrun dwarfdump --uuid通过符号表文件查看UUID

符号表文件的UUID与dSYM文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看dSYM文件的UUID:

生成符号表文件(.zip) ---> 解压符号表文件(.symbol) ---> 使用文本编辑器打开符号表文件

其中符号表文件的“UUID”信息即Debug SO文件的UUID,亦是符号表文件的UUID,如果文件较大,建议使用“Sublime Text”等文本编辑器来打开符号表文件。

如何找回已发布到App Store的App对应的dSYM文件?

通过Xcode找回

打开 Xcode 顶部菜单栏 -> Window -> Organizer 窗口:

打开 Xcode 顶部菜单栏,选择 Archive 标签:

找到发布的归档包,右键点击对应归档包,选择Show in Finder操作:

右键选择定位到的归档文件,选择显示包内容操作:

选择dSYMs目录,目录内即为下载到的 dSYM 文件:

通过iTunes Connect找回

登录iTunes Connect;

进入“我的App(My Apps)”的“活动(Activity)”页面:

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

通过mdfind工具找回在Bugly的issue页面查询到crash对应的UUID:然后在Mac的Shell中,用mdfind命令定位dSYM文件:mdfind "com_apple_xcode_dsym_uuids =="

注意,使用mdfind时,UUID需要格式转换(增加“-”): 12345678-1234-1234-1234-xxxxxxxxxxxx

例如,要定位的dSYM的UUID为:E30FC309DF7B3C9F8AC57F0F6047D65F 则定位dSYM文件的命令如下:

mdfind "com_apple_xcode_dsym_uuids == E30FC309-DF7B-3C9F-8AC5-7F0F6047D65F"

|12345678-1234-1234-1234-xxxxxxxxxxxx|

建议每次构建或者发布APP版本的时候,备份App对应的dSYM文件!

文章来源:https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=1492997248592#top

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容