我正在寻找il2cpp构建中的错误,根据本指南https://support.unity3d.com/hc/en-us/articles/115000292166-Symbolicate-Android-crash
它指定32位短地址0043a05c,该地址在执行以下命令之后
> ./arm-linux-androideabi-addr2line -f -C -e /Applications/Unity.app/Content/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Symbols/armeabi-v7a/libunity.sym.so 0043a05c被解密为可读的堆栈跟踪
Thread :: RunThreadWrapper (void *) 18: 06: 51.501: I / DEBUG (242):但是从那以后,Unity成功地进行了公平的开发,现在在ARM64下运行,在我崩溃的情况下,内存地址现在是这样的
00000000001f6f34统一有32位和64位的解密库。它们的名称都是相同的- libunity.sym.so,它们只是位于不同的文件夹中- armeabi-v7代表32位,arm64-v8a用于64位。
但问题是,当我尝试给addr2line提供64位库时,它发誓
C: \ Program Files \ Unity \ Hub \ Editor \ 2019.2.19f1 \ Editor \ Data \ PlaybackEngines \ AndroidPlayer \ NDK \ toolchains \ arm-linux-androideabi-4.9 \ prebuilt \ windows-x86_64 \ bin \ arm64-v8a \ libunity. sym.so: File format not recognized当我使用32位lib时,一切正常。
$ ./arm-linux-androideabi-addr2line -f -C -e "C: \ Program Files \ Unity \ Hub \ Editor \ 2019.2.19f1 \ Editor \ Data \ PlaybackEngines \ AndroidPlayer \ NDK \ toolchains \ arm-linux-androideabi -4.9 \ prebuilt \ windows-x86_64 \ bin \ armeabi-v7a \ libunity.sym.so "00000000001f6f34
mbedtls :: SuiteTLSModule_MbedtlskUnitTestCategory :: Testpubkey_ParsePem_Return_Object_And_Raise_NoError_ForPEMEncodedObjectWithoutNullTerminationHelper :: RunImpl ()
??:?但是这个地址很可能是错误的,因为我正试图使用32位lib解密一个长地址。而处于调试模式的崩溃单元本身告诉我,此崩溃的堆栈跟踪是不同的。
00000000001f6f34 /data/app/сcom.myappName/lib/arm64/libunity.so (DebugStringToFilePostprocessedStacktrace (DebugStringToFileData const &) + 872)在这方面,有几个问题。
如果有更多的普通工具(可能是guey ),选择是否解密,选择堆栈跟踪--她自己从堆栈跟踪中获取内存地址,并将它们转换为可读的堆栈跟踪?。
发布于 2020-09-03 09:53:49
找到64位所需的实用程序。32位实用程序就位于这里。
C: \ Program Files \ Unity \ Hub \ Editor \ 2019.2.19f1 \ Editor \ Data \ PlaybackEngines \ AndroidPlayer \ NDK \ toolchains \ arm-linux-androideabi-4.9 \ prebuilt \ windows-x86_64 \ bin \ arm-linux-androideabi- addr2line.exe64位在这里
C: \ Program Files \ Unity \ Hub \ Editor \ 2019.2.19f1 \ Editor \ Data \ PlaybackEngines \ AndroidPlayer \ NDK \ toolchains \ aarch64-linux-android-4.9 \ prebuilt \ windows-x86_64 \ bin \ aarch64-linux-android- addr2line.exe它的名称有点不同- aarch64-linux-android-addr2line。尽管该实用程序的名称不包含单词arm,但它成功地从arm64-v8下解密了堆栈跟踪,并且通常会感知arm64-v8的字符。
其余的命令是相同的,即
./aarch64-linux-android-addr2line -f -C -e "C: \ Program Files \ Unity \ Hub \ Editor \ 2019.2.19f1 \ Editor \ Data \ PlaybackEngines \ AndroidPlayer \ NDK \ toolchains \ arm-linux-androideabi- 4.9 \ prebuilt \ windows-x86_64 \ bin \ arm64-v8a \ libunity.sym.so "00000000001f6f34返回内存地址00000000001f6f34的正常堆栈跟踪。
https://stackoverflow.com/questions/63709153
复制相似问题