什么是符号表?
符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:
<起始地址> <结束地址> <函数> [<文件名:行号>]
为什么要配置符号表?
为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。
举一个例子:
简而言之,配置符号表文件就是让网站中显示的出错堆栈从16进制解析为我们可以查看的关于 <起始地址> <结束地址> <函数> [<文件名:行号>]
的信息。
查看shell打印输出
位置为:Report Navigators
,快捷键 com + 9
, 就是左侧栏中第九项
知道在哪里查看就可以清楚当前run或者archive出来的ipa是否成功上传了dsYM文件
Debug模式
couldn't open file "/Users/tjsoft/Library/Developer/Xcode/DerivedData/..."
Xcode Release编译默认会生成dSYM文件,而Debug编译默认不会生成,对应的Xcode配置如下:
Xcode -> Build Settings -> Apple Clang - Code Generation -> Generate Debug Symbols -> Yes
Xcode -> Build Settings -> Build Option -> Debug Information Format -> DWARF with dSYM File
同时,将shell中的 UPLOAD_DEBUG_SYMBOLS=1
去除注释修改为1
Archive模式
Release模式下默认会生成dSYM文件,在Archive打包过程中,官方给的shell将控制此模式上传的UPLOAD_ARCHIVE_ONLY
注释了,默认为所有的都会release模式都会上传,但是大部分情况下,我们需要bugly统计的情况下是Archive打包出来,用来记录崩溃信息的。
所以在集成bugly的时候,在debug模式下无需使用bugly模块服务,在代码中使用宏debug即可
#if !DEBUG
BuglyConfig * config = [[BuglyConfig alloc] init];
config.reportLogLevel = BuglyLogLevelWarn;
[Bugly startWithAppId:appId config:config];
#endif
同时脚本中设置,避免除archive以外的Release模式上传dSYM文件
UPLOAD_ARCHIVE_ONLY=1
脚步自动上传dsYM出现问题
com + 9
查看,出现
Showing All Messages
curl: (26) couldn't open file "/Users/tjsoft/Library/Developer/Xcode/DerivedData/XXXXX-haahjjaondjaenfagukjupzqycwk/Build/Intermediates.noindex/ArchiveIntermediates/taiji/BuildProductsPath/BuglySymbolTemp/XXX.app.dSYM.zip"
无法找到压缩的ZIP文件,相对应的文件夹打开压缩文件,说明Shell没有压缩成功。仔细寻找echo信息,可以看到zip erro
zip error: Nothing to do!
sleep 2s
for dsymFile in $(find "$DSYM_FOLDER" -name '*.dSYM'); do
😅。。。暂时先这样解决
bugly 抽风没有解析的情况下
没错 ,在dsYM确认UUID准确的情况下,就是对于非系统库的文件不解析。。。😭
可以看到除了自己写的文件不解析出来之外,UIKitCore和CoreFoundation等都是可以。
这个时候推荐下大神写到dsYM分析工具
具体源码和介绍都写的很清晰,这里说下 对应bugly中的 需要填写的内存地址和Slide Address
首先,切换为原始不解析模式,两列数据对应两个信息
分析图如下:
2018.10.20
Bugly我
这也算一个问题。。。希望有大佬看到可以顺便指导下。。