using System; using System.Runtime.Serialization; namespace UnityEngine.UI.Tests.Utils { class ExceptionUtils { public static void PreserveStackTrace(Exception e) { var ctx = new StreamingContext(StreamingContextStates.CrossAppDomain); var mgr = new ObjectManager(null, ctx); var si = new SerializationInfo(e.GetType(), new FormatterConverter()); e.GetObjectData(si, ctx); mgr.RegisterObject(e, 1, si); // prepare for SetObjectData mgr.DoFixups(); // ObjectManager calls SetObjectData // voila, e is unmodified save for _remoteStackTraceString } } }