首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Addr2line 64位工具

Addr2line 64位工具
EN

Stack Overflow用户
提问于 2020-09-02 15:54:56
回答 1查看 2.9K关注 0票数 0

我正在寻找il2cpp构建中的错误,根据本指南https://support.unity3d.com/hc/en-us/articles/115000292166-Symbolicate-Android-crash

它指定32位短地址0043a05c,该地址在执行以下命令之后

代码语言:javascript
复制
> ./arm-linux-androideabi-addr2line -f -C -e /Applications/Unity.app/Content/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Symbols/armeabi-v7a/libunity.sym.so 0043a05c

被解密为可读的堆栈跟踪

代码语言:javascript
复制
Thread :: RunThreadWrapper (void *) 18: 06: 51.501: I / DEBUG (242):

但是从那以后,Unity成功地进行了公平的开发,现在在ARM64下运行,在我崩溃的情况下,内存地址现在是这样的

代码语言:javascript
复制
00000000001f6f34

统一有32位和64位的解密库。它们的名称都是相同的- libunity.sym.so,它们只是位于不同的文件夹中- armeabi-v7代表32位,arm64-v8a用于64位。

但问题是,当我尝试给addr2line提供64位库时,它发誓

代码语言:javascript
复制
 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时,一切正常。

代码语言:javascript
复制
$ ./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解密一个长地址。而处于调试模式的崩溃单元本身告诉我,此崩溃的堆栈跟踪是不同的。

代码语言:javascript
复制
 00000000001f6f34 /data/app/сcom.myappName/lib/arm64/libunity.so (DebugStringToFilePostprocessedStacktrace (DebugStringToFileData const &) + 872)

在这方面,有几个问题。

  1. 有64位addr2line或类似的工具吗?或者已经是32岁和64岁了,我只是做错了什么吗?

  1. 为什么addr2line不读取x64文件夹中的libunity.sym.so,说不支持文件格式?从文件夹x32是可读的,虽然名称和格式是相同的!(libunity.sym.so)

如果有更多的普通工具(可能是guey ),选择是否解密,选择堆栈跟踪--她自己从堆栈跟踪中获取内存地址,并将它们转换为可读的堆栈跟踪?。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 09:53:49

找到64位所需的实用程序。32位实用程序就位于这里。

代码语言:javascript
复制
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.exe

64位在这里

代码语言:javascript
复制
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的字符。

其余的命令是相同的,即

代码语言:javascript
复制
./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的正常堆栈跟踪。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63709153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档