private static void RenderException(XElement ex) { if (ex.Name == "innerexception") { ex = ex.Elements().Single(); } var exType = ex.Elements().Single(e => e.Name == "type").Value; var exMessage = ex.Elements().Single(e => e.Name == "message").Value; var exStacktrace = ex.Elements().Single(e => e.Name == "stacktrace").Value; var exInnerexception = ex.Elements().Single(e => e.Name == "innerexception"); var exceptionRenderer = new TableRenderer("Exception details:", new[] { new Tuple <string, int>(exType, Console.WindowWidth - 6), }); TableRenderer.SplitString(exMessage, Console.WindowWidth - 9).ToList().ForEach(l => exceptionRenderer.RenderRow(new[] { l })); TableRenderer.SplitString(exStacktrace, Console.WindowWidth - 9).ToList().ForEach(l => exceptionRenderer.RenderRow(new[] { l })); if (string.IsNullOrEmpty(exInnerexception.Value)) { return; } Console.WriteLine(); Console.WriteLine("Inner exception:"); RenderException(exInnerexception); }
private static void RenderException(UnhandledException ex) { var exceptionRenderer = new TableRenderer("Exception details:", new[] { new Tuple <string, int>(ex.Source, Console.WindowWidth - 6), }); TableRenderer.SplitString(ex.Message, Console.WindowWidth - 9).ToList().ForEach(l => exceptionRenderer.RenderRow(new[] { l })); TableRenderer.SplitString(ex.StackTrace, Console.WindowWidth - 9).ToList().ForEach(l => exceptionRenderer.RenderRow(new[] { l })); if (!string.IsNullOrEmpty(ex.InnerExMessage)) { TableRenderer.SplitString(ex.InnerExMessage, Console.WindowWidth - 9).ToList().ForEach(l => exceptionRenderer.RenderRow(new[] { l })); } }