我们在 Unity il2cpp 项目中使用 Firebase 10.7.0。崩溃和异常会显示在 Crashlytics 中。异常按预期工作。但是,崩溃调用堆栈不准确 - 它们与 Unity 的崩溃报告器显示的内容不匹配,而且在任何线程中似乎都没有任何 libil2cpp.so 或 libunity.so 条目。
通过让应用程序故意崩溃,我们可以验证调用堆栈在 Unity 崩溃诊断中看起来是否正确:
Thread 0 (crashed)
0 libc.so 0x00000000f3e64bac <symbols missing for uuid: 13bc715234d0861084dc092396cf9938>
1 libunity.so 0x00000000b43a54e1 Utils_CUSTOM_ForceCrash(DiagnosticsUtils_Bindings::ForcedCrashCategory)
2 libil2cpp.so 0x00000000045b71ec (unknown) (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:0)
3 libil2cpp.so 0x00000000b3a431f0 UnityEvent_Invoke_mFBF80D59B03C30C5FE6A06F897D954ACADE061D2 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:15108)
4 libil2cpp.so 0x00000000045b71ec (unknown) (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:0)
5 libil2cpp.so 0x00000000b3a431f0 UnityEvent_Invoke_mFBF80D59B03C30C5FE6A06F897D954ACADE061D2 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:15108)
6 libil2cpp.so 0x000000000198c63c EventFunction_1_Invoke_m98A8A653E7180305E41F7CFFDDD9D32C63B96FE7_gshared_inline (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\GenericMethods__34.cpp:44326)
7 libil2cpp.so 0x000000000198c630 EventFunction_1_Invoke_m98A8A653E7180305E41F7CFFDDD9D32C63B96FE7_inline (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\GenericMethods__34.cpp:15124)
8 libil2cpp.so 0x00000000b0e18644 ExecuteEvents_Execute_TisRuntimeObject_mDC4455B743BE4A6BA46DD741D0E0AB150FF1209A_gshared (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\GenericMethods__34.cpp:42151)
9 libil2cpp.so 0x0000000004101004 ExecuteEvents_Execute_TisIPointerClickHandler_t77341AA19DE37C26F5F619DE8BD28B70D5A2B5D8_m024FB23AA1DBB1B7A5E1935FA35A1E4FF57AC5F6 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:5169)
10 libil2cpp.so 0x00000000b358d008 InputSystemUIInputModule_ProcessPointerButton_m68284C737796E80096AD8EAD1E0C687577131FE6 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:8033)
11 libil2cpp.so 0x00000000b358c590 InputSystemUIInputModule_ProcessPointer_mD889935190247CE78A8FE68ACA10CDD1C3B43E5D (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:6936)
12 libil2cpp.so 0x00000000b3592c50 InputSystemUIInputModule_Process_mD46ECAA34DE552BF7178B12774FDF80ED24FB980 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:13692)
13 libil2cpp.so 0x00000000b076b344 il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**)
14 libil2cpp.so 0x00000000b076b284 il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**)
15 libunity.so 0x00000000b4566e09 scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool)
16 libunity.so 0x00000000b45725bd ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool)
17 libunity.so 0x00000000b457c455 MonoBehaviour::CallUpdateMethod(int)
18 libunity.so 0x00000000b4420a29 void BaseBehaviourManager::CommonUpdate<BehaviourManager>()
19 libunity.so 0x00000000b44b537f ExecutePlayerLoop(NativePlayerLoopSystem*)
20 libunity.so 0x00000000b44b53a1 ExecutePlayerLoop(NativePlayerLoopSystem*)
21 libunity.so 0x00000000b44b5583 PlayerLoop()
22 libunity.so 0x00000000b45cd87b UnityPlayerLoop()
23 libunity.so 0x00000000b45de387 nativeRender(_JNIEnv*, _jobject*)
24 base.odex 0x00000000c73869cb <symbols missing for uuid: 0000000000000000000000000000000000000000>
同一崩溃实例的 Firebase 调用堆栈如下所示:
Crashed: Thread: SIGSEGV 0x0000000000001d86
#00 pc 0x9fbac libc.so (BuildId: 13bc715234d0861084dc092396cf9938)
#01 pc 0xbf7ffffe
当我下载完整的堆栈跟踪时,libil2cpp.so 不会出现在任何线程中。 libunity.so 也没有。都是 libc.so/libutils.so/libart.so/libmonochrome.so。这几乎就像 Crashlytics 跟踪来自不同的进程。唯一暗示它实际上是 Unity 可执行文件的是几个线程中有一些 libunitytuningfork.so 引用。
值得注意的是,Crashlytics 中的 iOS 崩溃是完美的 - 只是 Android 的崩溃是错误的。
我们很乐意继续使用 Unity 崩溃仪表板,但它不会显示 Android 崩溃的每个线程(仅显示崩溃的线程),因此它对于多线程问题不太有用。真的很想让 Crashlytics 正常工作 - 有人见过类似的东西吗?
为了确保您每次构建 Android 时都会生成并上传符号?
此步骤作为 iOS 构建过程的一部分自动完成,但 必须为每个 Android 构建运行。
如果您还没有这样做过,请尝试一下,看看它如何改变您所看到的内容以及结果与您的期望有多相符。