Сигнал ошибки 11 (SIGSEGV), код 2 в приложении Unity - PullRequest
0 голосов
/ 20 мая 2018

Я работаю над игрой для Android в Unity 2018.1.0f2.Некоторые сборки приложения приводят к сбою.Журнал содержит следующее:

05-20 18:52:17.993: A/libc(26270): Fatal signal 11 (SIGSEGV), code 2, fault addr 0xef97cffc in tid 26284 (UnityMain)
05-20 18:52:17.993: A/libc(26270): [ 05-20 18:52:17.993  3095: 3095 W/         ]
05-20 18:52:17.993: A/libc(26270): debuggerd: handling request: pid=26270 uid=10367 gid=10367 tid=26284
05-20 18:52:18.094: A/DEBUG(26286): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-20 18:52:18.094: A/DEBUG(26286): Build fingerprint: 'samsung/heroltexx/herolte:7.0/NRD90M/G930FXXS2DRDI:user/release-keys'
05-20 18:52:18.094: A/DEBUG(26286): Revision: '8'
05-20 18:52:18.094: A/DEBUG(26286): ABI: 'arm'
05-20 18:52:18.095: A/DEBUG(26286): pid: 26270, tid: 26284, name: UnityMain  >>> de.zoomapp.zoom <<<
05-20 18:52:18.095: A/DEBUG(26286): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xef97cffc
05-20 18:52:18.095: A/DEBUG(26286):     r0 e9c93908  r1 f0f805c0  r2 e42c70e0  r3 00000008
05-20 18:52:18.095: A/DEBUG(26286):     r4 00000000  r5 e42c70e0  r6 00000010  r7 00000008
05-20 18:52:18.095: A/DEBUG(26286):     r8 e42c7000  r9 e9c93908  sl f0f805c0  fp 00000000
05-20 18:52:18.095: A/DEBUG(26286):     ip f1200948  sp ef97d020  lr f11e6bc1  pc f11cbf00  cpsr 60070030
05-20 18:52:18.098: A/DEBUG(26286): backtrace:
05-20 18:52:18.098: A/DEBUG(26286):     #00 pc 00053f00  /system/lib/libc.so (arena_purge_to_limit+1151)
05-20 18:52:18.098: A/DEBUG(26286):     #01 pc 00064095  /system/lib/libc.so (imemalign+428)
05-20 18:52:18.098: A/DEBUG(26286):     #02 pc 0000002f  <unknown>
05-20 18:52:19.028: E/audit(4563): type=1701 audit(1526835139.011:7135): auid=4294967295 uid=10367 gid=10367 ses=4294967295 subj=u:r:untrusted_app:s0:c512,c768 pid=26284 comm="UnityMain" exe="/system/bin/app_process32" sig=11
05-20 18:52:19.054: E/lowmemorykiller(3180): Error writing /proc/26270/oom_score_adj; errno=22
05-20 18:52:19.059: E/InputDispatcher(4902): channel ~ Channel is unrecoverably broken and will be disposed!
05-20 18:52:21.967: E/OpenGLRenderer(4902): Error:glDeleteShader::<shader> is not a value generated by OpenGL
05-20 18:52:21.967: E/OpenGLRenderer(4902): Error:glDeleteShader::<shader> is not a value generated by OpenGL
05-20 18:52:21.967: E/OpenGLRenderer(4902): Error:glDeleteShader::<shader> is not a value generated by OpenGL
05-20 18:52:21.967: E/OpenGLRenderer(4902): Error:glDeleteShader::<shader> is not a value generated by OpenGL
05-20 18:52:21.967: E/OpenGLRenderer(4902): Error:glDeleteShader::<shader> is not a value generated by OpenGL
05-20 18:52:21.967: E/OpenGLRenderer(4902): Error:glDeleteShader::<shader> is not a value generated by OpenGL

Как я уже говорил, я не вижу этой проблемы каждый раз, только в некоторых сборках.Авария происходит еще до появления заставки Unity.Кажется, что ни один из моих сценариев не вызывается (даже Awake ()) до его сбоя.Также это произошло только в сборке релиза, которую я хотел загрузить в Google Play Store.Эта версия сборки разделена на APK и OBB файл Unity, так что, возможно, есть какая-то проблема?Я не знаю, могу ли я что-то сделать, чтобы избежать этого, так как я не понимаю, как мой код или сцена могут привести к этой ошибке.

Возможно, кто-то видел такую ​​ошибку раньше или даже имелкакая-то похожая проблема и может дать мне подсказку, как это исправить.

Спасибо, ребята.

С уважением, Майкл

1 Ответ

0 голосов
/ 21 мая 2018

Любой сбой внутри malloc, realloc, free или memalign указывает на 99,99% того, что у вас повреждена куча (которая является результатом переполнения выделенного из кучи буфера, free в нераспределенном состояниипамять, освобождение памяти дважды и т. д. и т. д.)

Я не вижу этой проблемы каждый раз, только в некоторых сборках

Да: все это довольно характернопроблем с повреждением кучи.

Я не понимаю, как мой код или сцена могут привести к этой ошибке.

К сожалению, ошибки повреждения кучи часто очень трудно отладитьбез поддержки инструмента.

В Linux и Mac OSX вы можете использовать valgrind или (лучше) Address Sanitizer. Похоже, адресное дезинфицирующее средство доступно и на Android.

...