La segunda mitad del código en uno de mis métodos no se está ejecutando. Unity registra las excepciones del subproceso principal en la consola de forma predeterminada. Aunque mi función se ejecuta en el subproceso principal, no veo ningún registro de error en la consola. Esto hace que encontrar errores y corregir el código sea realmente engorroso.
Aquí está mi método simplificado:
private void DoInitialize() { LogWarn($"HERE 1.5 item {i}"); // this prints LogWarn($"THIS SHIT {i.shardPrice.amount}"); // this causes a null pointer exception LogWarn($"HERE 1.6 item {i}"); // this doesn't print }Adjunté el depurador y recorrí el código hasta que encontré la línea que está causando el problema. Comentar la línea hará que el programa se ejecute correctamente. Tras la inspección, resulta que tengo una excepción de puntero nulo en esa línea.
¿Cómo sé que el código se está ejecutando en el hilo principal? Thread.CurrentThread.ManagedThreadId.ToString() antes de la línea defectuosa y en las devoluciones de llamada de Start() y me aseguro de que la identificación sea la misma.
Aquí está el seguimiento de la pila del hilo justo antes de que vaya a algún lugar aleatorio para el que no tengo los símbolos. Mi única explicación para esto es que los métodos de Firebase en la parte inferior de la pila detectan la excepción y no permiten que se propague a Unity. 
Aquí están mis preguntas:
Me di cuenta de que, dado que firebase usa C# Tasks, se espera que se detecten las excepciones. Escribí un método auxiliar para imprimir excepciones de tareas en la consola. Puede usarlo para tareas que espera tener éxito (al igual que el código normal de Unity).
public static class TaskExts { public static void LogExceptionIfFaulted(this Task task) { task.ContinueWithOnMainThread(t => { if (t.IsFaulted) { Debug.LogException(t.Exception.Flatten().InnerException); } }); } }uso
FirebaseRemoteConfig.FetchAsync(TimeSpan.Zero).ContinueWithOnMainThread(task => { // custom code which may throw exceptions }).LogExceptionIfFaulted();