xzhuan原创稿件,转载请注明出处!
1. 案例: Android真机闪退
2. 需求:定位报错位置
错误日志如下
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.0026d974(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.0026d8ec(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.005bf240(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.005bf8ec(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.005b1aa0(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.005b1ad8(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.005b1cb0(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.0069b8e4(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at libunity.006a9afc(Native Method)
04-28 16:15:07.583 2256 2278 E MessageQueue: at Unknown.0dfffffc(Unknown Source)
3. 使用ndk包含的addr2line.exe工具
目录位置是 android-ndk-xxx\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-addr2line.exe
android-ndk-xxx是自己ndk名子
4. libunity.so目录UnityXXX\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\armeabi-v7a\libunity.sym.so
unity目录UnityXXX替换成自己的
armeabi-v7a编译时用的库要对上(我这里测试用的这个)
5. 新建bat文件,填写如下
.\arm-linux-androideabi-addr2line.exe -f -C -e libunity.sym.so 0026d974
自己对下目录位置
6. 双击执行bat 输出如下
D:\Program Files\Unity2018.4.16f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\armeabi-v7a>D:\sdk\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-addr2line.exe -f -C -e libunity.sym.so 0026d974
AssetBundleLoadFromAsyncOperation::TryToLoadAndInitializeAssetBundle()
??:?
这样就能定位 出错的大概位置了
注意: 混淆、加密过代码的工程 不适用