protected virtual void WriteException(IErrorWriter w, ExceptionModel model)
 {
     if (model.InnerException != null)
     {
         WriteException(w, model.InnerException);
     }
     w.Write("<div class='exception'><span class='exceptionType'>");
     w.WriteText(model.TypeName);
     w.Write("</span><span class='exceptionMessage'>");
     w.WriteText(model.Message);
     w.Write("</span><hr />");
     if (model.AdditionalInfo != null && model.AdditionalInfo.Length > 0)
     {
         w.Write("<div class='exceptionAdditionalInfo'>");
         foreach (var info in model.AdditionalInfo)
         {
             w.Write("<div> <h3>");
             w.WriteText(info.Title);
             w.Write("</h3>");
             if (info.Objects != null)
                 foreach (var obj in info.Objects)
                 {
                     if (info.Display == ExceptionAdditionalInfo.DisplayMode.ToString)
                     {
                         w.Write("<p>" + WebUtility.HtmlEncode(obj.ToString()) + "</p>");
                     }
                     else if (info.Display == ExceptionAdditionalInfo.DisplayMode.ObjectBrowser)
                     {
                         w.ObjectBrowser(obj);
                     }
                 }
             w.Write("</div><hr />");
         }
         w.Write("</div>");
     }
     w.ObjectBrowser(model.OriginalException);
     w.Write("<hr /><div class='exceptionStackTrace'>");
     foreach (var frame in model.Stack)
     {
         w.Write("<div class='frame'><span class='method code'>");
         w.WriteText(FormatMethod(frame.Method));
         w.Write(" </span>");
         if (frame.At.FileName != null) w.WriteText(frame.At.FileName + " +" + frame.At.LineNumber);
         w.Write("<span class='docLinks'>");
         foreach (var icon in frame.MoreInfo)
         {
             w.Write("<a target=\"_blank\" href='" + icon.Link + "'>");
             w.Write(icon.ContentHtml);
             w.Write("</a>");
         }
         w.Write("</span>");
         w.WriteSourceCode(frame.At);
         w.Write("</div>");
     }
     w.Write("</div>");
     w.Write("</div>");
 }
Exemple #2
0
        public ExceptionModel LoadException(Exception exception, StackFrameModel[] existingTrace = null, Func <Exception, StackFrame[]> stackFrameGetter = null,
                                            Func <StackFrame, string> methodFormatter            = null)
        {
            stackFrameGetter = stackFrameGetter ?? (ex => new StackTrace(ex, true).GetFrames());

            var m = new ExceptionModel {
                Message           = exception.Message,
                OriginalException = exception,
                TypeName          = exception.GetType().FullName
            };

            var  frames   = stackFrameGetter(exception) ?? new StackFrame[0];
            var  stack    = new List <StackFrameModel>();
            bool skipping = existingTrace != null;

            for (int i = frames.Length - 1; i >= 0; i--)
            {
                var f = frames[i];
                if (skipping && existingTrace.Length > i && f.GetMethod() == existingTrace[i].Method)
                {
                    continue;
                }
                skipping = false;

                stack.Add(AddMoreInfo(new StackFrameModel {
                    Method          = f.GetMethod(),
                    FormattedMethod = methodFormatter?.Invoke(f),
                    At = LoadSourcePiece(f.GetFileName(), f.GetFileLineNumber(),
                                         errorColumn: f.GetFileColumnNumber())
                }));

                //Adding additional information to ExceptionModel from InfoLoaders and InfoCollectionLoader
                m.AdditionalInfo = InfoLoaders.Select(info => info(exception))
                                   .Where(info => info != null && info.Objects != null).ToArray()
                                   .Union(InfoCollectionLoader.Select(infoCollection => infoCollection(exception))
                                          .Where(infoCollection => infoCollection != null)
                                          .SelectMany(infoCollection => infoCollection)
                                          .Where(info => info != null && info.Objects != null).ToArray())
                                   .ToArray();
            }
            stack.Reverse();
            m.Stack = stack.ToArray();
            if (exception.InnerException != null)
            {
                m.InnerException = LoadException(exception.InnerException, m.Stack, stackFrameGetter, methodFormatter);
            }
            return(m);
        }
Exemple #3
0
        public ExceptionModel LoadException(Exception exception, StackFrameModel[] existingTrace = null)
        {
            var m = new ExceptionModel();

            m.Message           = exception.Message;
            m.OriginalException = exception;
            m.TypeName          = exception.GetType().FullName;
            var  frames   = new StackTrace(exception, true).GetFrames() ?? new StackFrame[0];
            var  stack    = new List <StackFrameModel>();
            bool skipping = existingTrace != null;

            for (int i = frames.Length - 1; i >= 0; i--)
            {
                var f = frames[i];
                if (skipping && existingTrace.Length > i && f.GetMethod() == existingTrace[i].Method)
                {
                    continue;
                }
                skipping = false;

                stack.Add(AddMoreInfo(new StackFrameModel
                {
                    Method = f.GetMethod(),
                    At     = LoadSourcePiece(f.GetFileName(), f.GetFileLineNumber(),
                                             errorColumn: f.GetFileColumnNumber())
                }));

                m.AdditionalInfo = InfoLoaders.Select(info => info(exception)).Where(info => info != null && info.Objects != null).ToArray();
            }
            stack.Reverse();
            m.Stack = stack.ToArray();
            if (exception.InnerException != null)
            {
                m.InnerException = LoadException(exception.InnerException, m.Stack);
            }
            return(m);
        }
Exemple #4
0
 protected virtual void WriteException(IErrorWriter w, ExceptionModel model)
 {
     if (model.InnerException != null)
     {
         WriteException(w, model.InnerException);
     }
     w.WriteUnencoded("<div class='exception'><span class='exceptionType'>");
     w.WriteText(model.TypeName);
     w.WriteUnencoded("</span><span class='exceptionMessage'>");
     w.WriteText(model.Message);
     w.WriteUnencoded("</span><hr />");
     if (model.AdditionalInfo != null && model.AdditionalInfo.Length > 0)
     {
         w.WriteUnencoded("<div class='exceptionAdditionalInfo'>");
         foreach (var info in model.AdditionalInfo)
         {
             w.WriteUnencoded("<div> <h3>");
             w.WriteText(info.Title);
             w.WriteUnencoded("</h3>");
             if (info.Objects != null)
             {
                 foreach (var obj in info.Objects)
                 {
                     if (info.Display == ExceptionAdditionalInfo.DisplayMode.ToString)
                     {
                         w.WriteUnencoded("<p>" + WebUtility.HtmlEncode(obj.ToString()) + "</p>");
                     }
                     else if (info.Display == ExceptionAdditionalInfo.DisplayMode.ObjectBrowser)
                     {
                         w.ObjectBrowser(obj);
                     }
                 }
             }
             w.WriteUnencoded("</div><hr />");
         }
         w.WriteUnencoded("</div>");
     }
     w.ObjectBrowser(model.OriginalException);
     w.WriteUnencoded("<hr /><div class='exceptionStackTrace'>");
     foreach (var frame in model.Stack)
     {
         w.WriteUnencoded("<div class='frame'><span class='method code'>");
         w.WriteText(FormatMethod(frame.Method));
         w.WriteUnencoded(" </span>");
         if (frame.At.FileName != null)
         {
             w.WriteText(frame.At.FileName + " +" + frame.At.LineNumber);
         }
         w.WriteUnencoded("<span class='docLinks'>");
         foreach (var icon in frame.MoreInfo)
         {
             w.WriteUnencoded("<a target=\"_blank\" href='" + icon.Link + "'>");
             w.WriteUnencoded(icon.ContentHtml);
             w.WriteUnencoded("</a>");
         }
         w.WriteUnencoded("</span>");
         w.WriteSourceCode(frame.At);
         w.WriteUnencoded("</div>");
     }
     w.WriteUnencoded("</div>");
     w.WriteUnencoded("</div>");
 }
Exemple #5
0
 public ExceptionSectionFormatter(ExceptionModel exception, string displayName = "Stack trace", string id = "stack_trace")
 {
     this.DisplayName = displayName;
     this.Exception   = exception;
     this.Id          = id;
 }