internal void SaveTraceToException(Exception exception) { if (exception.GetData(typeof(InterpretedFrameInfo)) == null) { exception.SetData(typeof(InterpretedFrameInfo), new List<InterpretedFrameInfo>(GetStackTraceDebugInfo()).ToArray()); } }
internal static RubyExceptionData/*!*/ AssociateInstance(Exception/*!*/ e) { RubyExceptionData result; #if FEATURE_THREAD Exception visibleException = RubyUtils.GetVisibleException(e); if (e == visibleException || visibleException == null) { result = new RubyExceptionData(e); } else { // Async exception Debug.Assert(e is ThreadAbortException); result = GetInstance(visibleException); if (result._exception == visibleException) { // A different instance of ThreadAbortException is thrown at the end of every catch block (as long as // Thread.ResetAbort is not called). However, we only want to remember the first one // as it will have the most complete stack trace. result._exception = e; } } #else result = new RubyExceptionData(e); #endif e.SetData(_DataKey, result); return result; }