CesiumGS / cesium-unity

Bringing the 3D geospatial ecosystem to Unity
https://cesium.com/platform/cesium-for-unity/
Apache License 2.0
347 stars 83 forks source link

Photogrammetry load failure causes crash in OnCesium3DTilesetLoadFailure #202

Open luolihui119 opened 1 year ago

luolihui119 commented 1 year ago

倾斜摄影加载失败,在OnCesium3DTilesetLoadFailure里面销毁承载Cesium3DTileset的GameObject时会崩溃。

崩溃信息大致如下:

Obtained 24 stack frames 0x00007ffb330cf4ba (CesiumForUnityNative-Runtime) DotNet_CesiumForUnity_CesiumBingMapsRasterOverlay_AddToTileset 0x000001e2cbdec89f (Mono JIT Code) (wrapper managed-to-native) CesiumForUnity.Cesium3DTileset:DotNet_CesiumForUnity_Cesium3DTileset_Update (intptr,CesiumForUnity.Cesium3DTileset/ImplementationHandle) 0x000001e2cbdec683 (Mono JIT Code) [Cesium3DTileset-generated.cs:467] CesiumForUnity.Cesium3DTileset:Update () 0x000001e1c2e76648 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_voidthis (object,intptr,intptr,intptr) 0x00007ffb503ffe24 (mono-2.0-bdwgc) [mini-runtime.c:3445] mono_jit_runtime_invoke 0x00007ffb5033e764 (mono-2.0-bdwgc) [object.c:3066] do_runtime_invoke 0x00007ffb5033e8fc (mono-2.0-bdwgc) [object.c:3113] mono_runtime_invoke 0x00007ff6cf784d44 (Unity) scripting_method_invoke 0x00007ff6cf7645e4 (Unity) ScriptingInvocation::Invoke 0x00007ff6cf74d8c4 (Unity) MonoBehaviour::CallMethodIfAvailable 0x00007ff6cf74d9b2 (Unity) MonoBehaviour::CallUpdateMethod 0x00007ff6cf23ad78 (Unity) BaseBehaviourManager::CommonUpdate 0x00007ff6cf24235a (Unity) BehaviourManager::Update 0x00007ff6cf45651d (Unity) InitPlayerLoopCallbacks'::2'::UpdateScriptRunBehaviourUpdateRegistrator::Forward 0x00007ff6cf43c70a (Unity) ExecutePlayerLoop 0x00007ff6cf43c896 (Unity) ExecutePlayerLoop 0x00007ff6cf442999 (Unity) PlayerLoop 0x00007ff6d03a25e9 (Unity) PlayerLoopController::UpdateScene 0x00007ff6d03a07ef (Unity) Application::TickTimer 0x00007ff6d07f0f5a (Unity) MainMessageLoop 0x00007ff6d07f580b (Unity) WinMain 0x00007ff6d1bb369e (Unity) __scrt_common_main_seh 0x00007ffbd96c26bd (KERNEL32) BaseThreadInitThunk 0x00007ffbdb26dfb8 (ntdll) RtlUserThreadStart

kring commented 1 year ago

Can you please provide us with steps to reproduce this crash?

luolihui119 commented 1 year ago

steps: 1、 create tileset

       GameObject ga = new GameObject();
       Cesium3DTileset tileset = ga.AddComponent<Cesium3DTileset>();
       tileset.tilesetSource = CesiumDataSource.FromUrl;
       tileset.url = url;

2、Just gave the wrong url

3、Cesium3DTileset.OnCesium3DTilesetLoadFailure += this.LoadFail;

public void LoadFail(Cesium3DTilesetLoadFailureDetails details) {
        Cesium3DTileset tileset = details.tileset;
        string url = tileset.url;
        if (beans.ContainsKey(url)) {
            FireEvent("failed", new object[] { url });
            TilesetBean bean = beans[url];
            //tileset.Dispose(); // Will cause a crash
            //bean.tilesetObj.SetActive(false); // Will cause a crash
            //GameObject.Destroy(bean.tilesetObj);// Will cause a crash
            beans.Remove(url);
        }
    }
j9liu commented 1 year ago

I was able to reproduce this error in all three cases by adding them to CesiumEditorUtility.HandleCesium3DTilesetLoadFailure: Though, Unity wasn't even able to obtain stack frames when they crashed; it just displays:

Obtained 2 stack frames
RtlLookupFunctionEntry returned NULL function. Aborting stack walk.
<Missing stacktrace information>

When I try DestroyImmediate on a tileset load failure, this gets printed instead:

Obtained 18 stack frames
0x000001dbe3967c5a (Mono JIT Code) (wrapper managed-to-native) Reinterop.ReinteropInitializer/CallbackFunctionNativeFunction:UnityEditor_CallbackFunction_InvokeCallback (intptr)
0x000001dbe3967b7b (Mono JIT Code) [ReinteropInitializer.cs:6477] Reinterop.ReinteropInitializer/CallbackFunctionNativeFunction:Invoke () 
0x000001dbe2916cc0 (Mono JIT Code) UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()
0x000001dc66c5b1ad (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void (object,intptr,intptr,intptr)
0x00007ffa8af7feb4 (mono-2.0-bdwgc) [mini-runtime.c:3445] mono_jit_runtime_invoke 
0x00007ffa8aebe764 (mono-2.0-bdwgc) [object.c:3066] do_runtime_invoke 
0x00007ffa8aebe8fc (mono-2.0-bdwgc) [object.c:3113] mono_runtime_invoke 
0x00007ff72200f644 (Unity) scripting_method_invoke
0x00007ff721feeee4 (Unity) ScriptingInvocation::Invoke
0x00007ff721fe9af5 (Unity) ScriptingInvocation::Invoke<void>
0x00007ff72212915b (Unity) Scripting::UnityEditor::EditorApplicationProxy::Internal_CallUpdateFunctions
0x00007ff722a5bc82 (Unity) SceneTracker::Update
0x00007ff722c0e556 (Unity) Application::TickTimer
0x00007ff72305ea3a (Unity) MainMessageLoop
0x00007ff7230632fb (Unity) WinMain
0x00007ff724404fbe (Unity) __scrt_common_main_seh
0x00007ffaf3ba7614 (KERNEL32) BaseThreadInitThunk
0x00007ffaf45626a1 (ntdll) RtlUserThreadStart