什么是正确的方式来显示完整的InnerException?

什么是正确的方式来显示我的完整的InnerException

我发现我的一些InnerExceptions有另外一个InnerException而且这个InnerException很深。

InnerException.ToString()做我的工作,或者我需要通过InnerExceptions循环,并build立与StringBuilderString

5 Solutions collect form web for “什么是正确的方式来显示完整的InnerException?”

您可以简单地打印exception.ToString() – 也将包含所有嵌套的InnerException全文。

只要使用exception.ToString()

http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx

ToString的默认实现获取抛出当前exception的类的名称,消息,对内部exception调用ToString的结果以及调用Environment.StackTrace的结果。 如果这些成员中的任何一个为null,则其值不包含在返回的string中。

如果没有错误信息或者是空string(“”),则不返回错误信息。 内部exception和堆栈跟踪的名称只有在它们不为空时才被返回。

exception.ToString()也将调用.ToString()该exception的内部exception,等等…

我通常这样做,以消除大部分的噪音:

 void LogException(Exception error) { Exception realerror = error; while (realerror.InnerException != null) realerror = realerror.InnerException; Console.WriteLine(realerror.ToString()) } 

当你需要完整的细节(所有消息和堆栈跟踪)和推荐的解决scheme时,Jon的答案是最好的解决scheme。

但是,可能会出现这种情况,您只需要内部消息,对于这些情况,我使用以下扩展方法:

 public static class ExceptionExtensions { public static string GetFullMessage(this Exception ex) { return ex.InnerException == null ? ex.Message : ex.Message + " --> " + ex.InnerException.GetFullMessage(); } } 

当我有不同的听众进行跟踪和logging时,我经常使用这种方法,并希望对他们有不同的看法。 这样,我可以有一个侦听器,通过电子邮件将堆栈跟踪的整个错误发送到开发团队,使用.ToString()方法进行debugging,并使用每天发生的所有错误的历史logging写入日志文件带有.GetFullMessage()方法的堆栈跟踪。

如果只想显示内部exception消息的特定行,则执行以下操作:

 catch (Exception ex) { string[] myex = ex.InnerException.Message.Split('"'); MessageBox.Show(myex[15]); } 

正如我使用myex [15],因为大多数myex [15]有正确的英文,我们可以很容易地理解的消息。

  • Pythonexception的最佳实践?
  • Rubyexception - 为什么“其他”?
  • 如何防止后台线程中的exception终止应用程序?
  • 我怎样才能在WinForms应用程序中捕获所有“未处理”的exception呢?
  • 处理“java.lang.OutOfMemoryError:PermGen空间”错误
  • ASP.NET Core Web APIexception处理
  • 抛出错误('味精')与抛出新的错误('味精')
  • 自动编号与entity framework
  • 好的方法来封装Integer.parseInt()
  • Python中的exception处理程序的代价
  • pythonexception消息捕获