#c# #android #c #unity3d
#c# #Android #c #unity3d
Вопрос:
Я ищу ошибки в сборке il2cpp Unity для Android в соответствии с этим руководством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
Расшифрован в читаемый stacktrace
Thread :: RunThreadWrapper (void *) 18: 06: 51.501: I / DEBUG (242):
Но с тех пор Unity удалось успешно развиваться, и теперь он работает под управлением ARM64, и в случае моих сбоев адреса памяти теперь выглядят так
00000000001f6f34
В Unity есть библиотеки для дешифрования как для 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-разрядную библиотеку, все идет нормально
$ ./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-разрядную библиотеку. И сам модуль сбоя в режиме отладки сообщает мне, что трассировка стека этого сбоя отличается
00000000001f6f34 /data/app/сcom.myappName/lib/arm64/libunity.so (DebugStringToFilePostprocessedStacktrace (DebugStringToFileData const amp;) 872)
В связи с этим несколько вопросов.
-
Существует ли 64-разрядный addr2line или какой-либо подобный инструмент? Или это уже 32 и 64, и я просто делаю что-то не так?
-
Почему libunity.sym.so из папки x64 не читается addr2line, говоря, что формат файла не поддерживается? И из папки x32 читается, хотя имя и формат те же! (libunity.sym.so )
-
Если есть более нормальные инструменты, возможно, в guey, чтобы выбрать, следует ли расшифровывать, выберите трассировку стека — и она сама получила адреса памяти из трассировки стека и преобразовала их в читаемую трассировку стека?
Ответ №1:
Найдена необходимая утилита для 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.exe
И здесь 64 бита
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