【问题标题】:Unity project build in Xcode, crash randomly, i don't know why... help pleaseUnity项目在Xcode中构建,随机崩溃,我不知道为什么......请帮助
【发布时间】:2014-11-13 08:55:13
【问题描述】:

Xcode 版本为 6.1 Unity 版本为 4.54f1 和 NGUI 2.6.1

我确信在 UnityEngine 中运行时控制台上没有错误记录,但在 iPhone 上运行时,它大约每小时崩溃一次。 我尝试使用 dSYM 来追踪错误,但我看到的只是内存地址,我不明白。

  1. Unity 或 Xcode 中是否有任何选项可以帮助我避免此类崩溃?

    这是我的设置:

    脚本调用优化为"Slow and Safe"
    优化级别为"None[-O0]"

  2. 什么样的错误会导致这样的崩溃,内存错误?

  3. 在我的代码中跟踪错误行的方法。

    线程 0 崩溃:

    0   libsystem_kernel.dylib          0x37f551fc __pthread_kill + 8
    1   libsystem_pthread.dylib         0x37fbea2e pthread_kill + 54
    2   libsystem_c.dylib               0x37f05ff8 abort + 72
    3   pp                              0x01e2489c mono_handle_native_sigsegv + 312
    4   pp                              0x01e1420c mono_sigsegv_signal_handler + 256
    5   libsystem_platform.dylib        0x37fb9060 _sigtramp + 40
    6   pp                              0x01f10e34 g_logv + 160
    7   pp                              0x01f10e5c g_log + 28
    8   pp                              0x01e18d64 get_numerous_trampoline + 368
    9   pp                              0x01e1c874 mono_aot_create_specific_trampoline + 468
    10  pp                              0x01e26aa4 mono_create_specific_trampoline + 72
    11  pp                              0x01e26f5c mono_create_jit_trampoline_in_domain + 328
    12  pp                              0x01e27088 mono_create_jit_trampoline + 20
    13  pp                              0x01e14604 mono_resolve_patch_target + 504
    14  pp                              0x01e1ddf0 mono_aot_plt_resolve + 452
    15  pp                              0x01e26040 mono_aot_plt_trampoline + 32
    16  pp                              0x016cbae8 generic_trampoline_6 + 120
    17  pp                              0x0162295c m_wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (mscorlib.dll.s:354297)
    18  pp                              0x01e13ab0 mono_jit_runtime_invoke + 2152
    19  pp                              0x01eb5d60 mono_runtime_invoke + 132
    20  pp                              0x01a01148 MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethod*, MonoObject*, MonoException**) (MonoBehaviour.cpp:933)
    21  pp                              0x01a01284 MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethod*, MonoObject*) (MonoBehaviour.cpp:973)
    22  pp                              0x01a10a34 Scripting::SendScriptingMessage(Unity::GameObject&, char const*, MonoObject*) (Scripting.cpp:147)
    23  pp                              0x01a10b18 Scripting::SendScriptingMessage(Unity::GameObject&, std::string const&, MonoObject*, int) (Scripting.cpp:186)
    24  pp                              0x01c26c6c GameObject_CUSTOM_SendMessage(ReadOnlyScriptingObjectOfType<Unity::GameObject>, ICallString, MonoObject*, int) (UnityEngineGameObject.cpp:343)
    25  pp                              0x01168a54 m_wrapper_managed_to_native_UnityEngine_GameObject_SendMessage_string_object_UnityEngine_SendMessageOptions (UnityEngine.dll.s:51208)
    26  pp                              0x002503f4 m_UIEventListener_OnClick (Assembly-CSharp.dll.s:20588)
    27  pp                              0x0162295c m_wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (mscorlib.dll.s:354297)
    28  pp                              0x01e13ab0 mono_jit_runtime_invoke + 2152
    29  pp                              0x01eb5d60 mono_runtime_invoke + 132
    30  pp                              0x01a01148 MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethod*, MonoObject*, MonoException**) (MonoBehaviour.cpp:933)
    31  pp                              0x01a01284 MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethod*, MonoObject*) (MonoBehaviour.cpp:973)
    32  pp                              0x01a10a34 Scripting::SendScriptingMessage(Unity::GameObject&, char const*, MonoObject*) 
    (Scripting.cpp:147)
    33  pp                              0x01a10b18 Scripting::SendScriptingMessage(Unity::GameObject&, std::string const&, MonoObject*, int) (Scripting.cpp:186)
    34  pp                              0x01c26c6c GameObject_CUSTOM_SendMessage(ReadOnlyScriptingObjectOfType<Unity::GameObject>, ICallString, MonoObject*, int) (UnityEngineGameObject.cpp:343)
    35  pp                              0x01168a54 m_wrapper_managed_to_native_UnityEngine_GameObject_SendMessage_string_object_UnityEngine_SendMessageOptions (UnityEngine.dll.s:51208)
    36  pp                              0x0025e990 m_UICamera_ProcessTouch_bool_bool (Assembly-CSharp.dll.s:26704)
    37  pp                              0x0025d75c m_UICamera_ProcessTouches (Assembly-CSharp.dll.s:26229)
    38  pp                              0x0025c594 m_UICamera_Update (Assembly-CSharp.dll.s:25808)
    39  pp                              0x0162295c m_wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (mscorlib.dll.s:354297)
    40  pp                              0x01e13ab0 mono_jit_runtime_invoke + 2152
    41  pp                              0x01eb5d60 mono_runtime_invoke + 132
    42  pp                              0x01961f8c scripting_method_invoke(ScriptingMethod*, MonoObject*, ScriptingArguments&, MonoException**) (ScriptingBackendApi_Mono.cpp:199)
    43  pp                              0x01a0cb30 ScriptingInvocationNoArgs::Invoke(MonoException**) (ScriptingInvocationNoArgs.cpp:95)
    44  pp                              0x01a0caec ScriptingInvocationNoArgs::Invoke() (ScriptingInvocationNoArgs.cpp:79)
    45  pp                              0x01a003a8 MonoBehaviour::CallUpdateMethod(int) (MonoBehaviour.cpp:612)
    46  pp                              0x01a003c0 MonoBehaviour::Update() (MonoBehaviour.cpp:617)
    47  pp                              0x0194b884 void BaseBehaviourManager::CommonUpdate<BehaviourManager>() (Behaviour.cpp:156)
    48  pp                              0x0194bc50 BehaviourManager::Update() (Behaviour.cpp:172)
    49  pp                              0x019d2be4 PlayerLoop(bool, bool, IHookEvent*) (Player.cpp:1895)
    50  pp                              0x017cda74 UnityPlayerLoop (LibEntryPoint.mm:239)
    51  pp                              0x017925bc -[UnityAppController(Rendering) repaint] (UnityAppController+Rendering.mm:55)
    52  pp                              0x017923b0 -[UnityAppController(Rendering) repaintDisplayLink] (UnityAppController+Rendering.mm:34)
    53  QuartzCore                      0x2facb9ca CA::Display::DisplayLinkItem::dispatch() + 94
    54  QuartzCore                      0x2facb774 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 340
    55  IOMobileFramebuffer             0x326c176a IOMobileFramebufferVsyncNotifyFunc + 102
    56  IOKit                           0x2e363a72 IODispatchCalloutFromCFMessage + 246
    57  CoreFoundation                  0x2d641e1e __CFMachPortPerform + 134
    58  CoreFoundation                  0x2d64c9dc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
    59  CoreFoundation                  0x2d64c976 __CFRunLoopDoSource1 + 342
    60  CoreFoundation                  0x2d64b14a __CFRunLoopRun + 1394
    61  CoreFoundation                  0x2d5b5c22 CFRunLoopRunSpecific + 518
    62  CoreFoundation                  0x2d5b5a06 CFRunLoopRunInMode + 102
    63  GraphicsServices                0x322a527e GSEventRunModal + 134
    64  UIKit                           0x2fe59044 UIApplicationMain + 1132
    65  pp                              0x000cde78 main (main.mm:28)
    66  pp                              0x000cdd54 start + 36
    

【问题讨论】:

  • 堆栈跟踪或崩溃日志在哪里?
  • @trojanfoe 嗨,我在下面发布了崩溃日志。
  • 好的,现在您必须对崩溃日志进行符号化,这样您就可以看到崩溃的来源。然后用符号化版本更新问题。
  • 是的,阅读象征性崩溃日志。因为这个日志没有给出任何提示。
  • 这是我的符号化崩溃日志。有什么建议?谢谢!

标签: ios xcode memory unity3d crash


【解决方案1】:

跟踪的第 3 行,mono_handle_native_sigsegv 表示您正在尝试访问 NULL 对象。

如果您在编辑器中没有看到这一点,但在设备上看到了,请记住,不同设备上的时间会有所不同。可能由于时间差异,导致问题的行在对象在编辑器中无效之前被调用,但在设备上之后。

看起来它发生在您正在响应 OnClick 消息的某个地方。

【讨论】:

  • 谢谢,但 unity3d 可以捕获 NullReferenceError,它只是注销错误但不会在设备上崩溃,我确定它正在工作。
  • 空引用会使您的设备崩溃。它不会在编辑器中崩溃(但可能会突然结束当前帧),但会在设备上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多