最近拾掇电脑硬盘时,整理出一批不记得什么年月写下的随笔,准备整理到博客上,以便之后的管理。
关于项目真机调试时的崩溃问题,一般可以logcat或xcode看到相关的crash日志,拿到崩溃时的堆栈信息,但是backtrace中的地址信息并不直接可见(非debug版本的so库,并不包含符号表等调试信息),因此我们需要拿到对应的符号表,借助ndk的addr2line工具(arm-linux-androideabi-addr2line.exe,具体须根据调试环境选择)来查看:
这里主要说下unity的符号表:libunity/libmain——Unity5.3.6开始的版本都有提供(unity的安装目录下):
个人开发主要在win平台,对应的符号表目录如下:
其中1为平台,2为后端(il2cpp、mono),3为release或develop
eg:
- 安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\armeabi-v7a\libunity.sym.so
- 安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\armeabi-v7a\libunity.sym.so
注1:调试时,符号表版本须与打包APK的Editor版本一致
注2:addr2line usage:arm-linux-androideabi-addr2line -f -C -e libunity.sym.so %addr_lst%
- -f- Show function names
- -C- Demangle function names
- -e- Set the input file name
注3:cocos2dx亦然,没有单独的符号表文件,调试时使用debug版本的so库文件即可:
注4:若crash的点在libil2cpp,则需要关注其符号表——发出apk包中的libil2cpp.so不包含符号表,需要使用打包apk时自动生成的压缩包(.symbols.zip)下对应的文件:
arm-linux-androideabi-addr2line