gpt4 book ai didi

c# - 协程调用崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:05:39 26 4
gpt4 key购买 nike

我遇到了非常奇怪的崩溃:

Exception Type:  EXC_BAD_ACCESS (SIGABRT)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000004
Crashed Thread: 0

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3b1cc350 __pthread_kill + 8
1 libsystem_c.dylib 0x3b14311e pthread_kill + 54
2 libsystem_c.dylib 0x3b17f96e abort + 90
3 _example 0x0161cd74 mono_handle_native_sigsegv + 312
4 _example 0x0160c6e4 mono_sigsegv_signal_handler + 256
5 libsystem_c.dylib 0x3b14ce90 _sigtramp + 40
6 _example 0x01707114 g_hash_table_lookup_extended + 172
7 _example 0x01707154 g_hash_table_lookup + 20
8 _example 0x016a3144 mono_metadata_parse_type_full + 636
9 _example 0x016a2e70 mono_metadata_parse_generic_inst + 88
10 _example 0x016a34bc do_mono_metadata_parse_type + 768
11 _example 0x016a3abc mono_type_create_from_typespec + 216
12 _example 0x0164ee70 mono_type_retrieve_from_typespec + 32
13 _example 0x016464bc mono_class_get_full + 208
14 _example 0x01677fc4 method_from_memberref + 276
15 _example 0x016774a4 mono_get_method_from_token + 688
16 _example 0x01677140 mono_get_method_full + 176
17 _example 0x01677754 mono_get_method + 12
18 _example 0x01613554 decode_patch + 412
19 _example 0x016161f8 mono_aot_plt_resolve + 244
20 _example 0x0161e518 mono_aot_plt_trampoline + 32
21 _example 0x00dd33d8 generic_trampoline_6 + 120
22 _example 0x0124b0a8 scripting_method_invoke(ScriptingMethod*, MonoObject*, ScriptingArguments&, MonoException**) (ScriptingBackendApi_Mono.cpp:180)
23 _example 0x012ceed0 ScriptingInvocation::Invoke(MonoException**, bool) (ScriptingInvocation.cpp:113)
24 _example 0x012cee9c ScriptingInvocation::Invoke(MonoException**) (ScriptingInvocation.cpp:98)
25 _example 0x012cee48 bool ScriptingInvocation::Invoke<bool>(MonoException**) (ScriptingInvocation.cpp:72)
26 _example 0x012b2548 Coroutine::InvokeMoveNext(MonoException**) (Coroutine.cpp:180)
27 _example 0x012b229c Coroutine::Run() (Coroutine.cpp:205)
28 _example 0x012c4f6c MonoBehaviour::CreateCoroutine(MonoObject*, ScriptingMethod*) (MonoBehaviour.cpp:786)
29 _example 0x012c51f0 MonoBehaviour::StartCoroutineManaged2(MonoObject*) (MonoBehaviour.cpp:824)
30 _example 0x0144f89c MonoBehaviour_CUSTOM_StartCoroutine_Auto(ReadOnlyScriptingObjectOfType<MonoBehaviour>, MonoObject*) (UnityEngineMonoBehaviour.cpp:78)
31 _example 0x00b6745c m_UnityEngine_MonoBehaviour_StartCoroutine_System_Collections_IEnumerator + 40

在装有 iOS 6 的 4S 上,它们大约有 20% 的时间出现在同一个地方,但我无法在装有 iOS 7 的 iPhone 5 上重现它们。

在代码中,我试图调用协程,它看起来像这样:

IEnumerator SomeCoroutine(System.Action<bool> _Success)
{
#if UNITY_IPHONE
NativeObjectiveCMethod();
#elif UNITY_ANDROID
// ... something else, not relevant here
#endif
while(m_PrivateFieldSetInOtherThread == null)
{
yield return null;
}

if (_Success != null)
{
_Success(m_PrivateFieldSetInOtherThread.Value);
}
m_PrivateFieldSetInOtherThread = null;

}

我什至不明白它到底在哪里崩溃。

澄清:此字段在其他线程中设置,因为调用源自 native 级别的第三方 API。

最佳答案

Unity 的 ApI 不是线程安全的,因此不能从另一个线程使用它。 Unity 还实现了线程检查,以防止您尝试从另一个线程使用它。

关于c# - 协程调用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23062063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com