错误信号 11 (SIGSEGV),Unity 应用程序中的代码 2



我正在Unity 2018.1.0f2中开发Android游戏。应用程序的某些版本会导致崩溃。日志包含以下内容:

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商店的发布版本中。这个发布版本被Unity拆分为APK和OBB文件,所以也许有某种问题?我不知道我是否可以做很多事情来避免这种情况,因为我不明白我的代码或场景如何导致此错误。

也许有人以前见过这种错误,甚至遇到过类似的问题,可以给我一个如何解决这个问题的提示。

谢谢你们。

问候,迈克尔

mallocreallocfreememalign中的任何崩溃都 99.99% 表示您有堆损坏(这是堆分配的缓冲区溢出、free未分配的内存、释放内存两次等的结果(。

我不是每次都遇到这个问题,只是在某些版本中

是的:这些都是堆损坏问题的特征。

我不明白我的代码或场景如何导致此错误。

遗憾的是,如果没有工具支持,堆损坏错误通常很难调试。

在Linux和Mac OSX上,你可以使用valgrind或(更好的(Address Sanitizer。看起来地址清理器也可以在安卓上使用。

相关内容

最新更新