wasSharpNET – Rev 19

Subversion Repositories:
Rev:
///////////////////////////////////////////////////////////////////////////
//  Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3      //
//  Please see: http://www.gnu.org/licenses/gpl.html for legal details,  //
//  rights of fair usage, the disclaimer and warranty conditions.        //
///////////////////////////////////////////////////////////////////////////
// Based on Oguzhan KIRCALI & CDspace @ https://stackoverflow.com/questions/4272579/how-to-print-full-stack-trace-in-exception

using System;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.IO;

namespace wasSharpNET.Diagnostics
{
    public static class ExceptionExtensions
    {
        public static string PrettyPrint(this Exception x)
        {
            var st = new StackTrace(x, true);
            var frames = st.GetFrames();

            StringBuilder sb = new StringBuilder();
            sb.Append(Enumerable.Repeat('-', 75).ToArray());

            int indent = 0;
            foreach (var frame in frames)
            {
                if (frame.GetFileLineNumber() < 1)
                    continue;

                sb.Append(Enumerable.Repeat(' ', indent).ToArray());
                sb.Append(@" -> ");
                sb.Append("File: ");
                sb.Append(string.Join(
                    Path.DirectorySeparatorChar.ToString(),
                    frame.GetFileName()
                        .Split(Path.DirectorySeparatorChar)
                        .Reverse()
                        .Take(2)
                        .Reverse()
                    )
                );
                sb.Append(@" Method: ");
                sb.Append(frame.GetMethod().Name);
                sb.Append(@" Line and Column : ");
                sb.Append(frame.GetFileLineNumber());
                sb.Append(@":");
                sb.Append(frame.GetFileColumnNumber());
                sb.Append(Environment.NewLine);

                indent += 1;
            }

            sb.Append(Enumerable.Repeat('-', 75).ToArray());
            sb.Append(x);
            sb.Append(Enumerable.Repeat('-', 75).ToArray());

            return sb.ToString();
        }
    }
}