C# 相当于 Java 的 Exception.printStackTrace()?
Posted
技术标签:
【中文标题】C# 相当于 Java 的 Exception.printStackTrace()?【英文标题】:C# equivalent to Java's Exception.printStackTrace()? 【发布时间】:2010-09-24 22:32:48 【问题描述】:是否有与 Java 的 Exception.printStackTrace()
等效的 C# 方法,还是我必须自己编写一些东西,通过 InnerExceptions 工作?
【问题讨论】:
【参考方案1】:试试这个:
Console.WriteLine(ex.ToString());
来自http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx:
ToString的默认实现获取抛出当前异常的类名、消息、内部异常调用ToString的结果、调用Environment.StackTrace的结果。如果这些成员中的任何一个为 null,则其值不包含在返回的字符串中。
请注意,在上面的代码中,不需要调用ToString
,因为有一个重载需要System.Object
并直接调用ToString
。
【讨论】:
刚刚在 Linux 上的 .Net Core 2.1 中尝试过,现在似乎不再正确【参考方案2】:我想补充一下:如果要在异常之外打印堆栈,可以使用:
Console.WriteLine(System.Environment.StackTrace);
【讨论】:
【参考方案3】:正如 Drew 所说,只需将异常转换为字符串即可。比如这个程序:
using System;
class Test
static void Main()
try
ThrowException();
catch (Exception e)
Console.WriteLine(e);
static void ThrowException()
try
ThrowException2();
catch (Exception e)
throw new Exception("Outer", e);
static void ThrowException2()
throw new Exception("Inner");
产生这个输出:
System.Exception: Outer ---> System.Exception: Inner
at Test.ThrowException2()
at Test.ThrowException()
--- End of inner exception stack trace ---
at Test.ThrowException()
at Test.Main()
【讨论】:
【参考方案4】:http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine(myException.StackTrace);
【讨论】:
不包括消息或内部异常详细信息。【参考方案5】: catch (Exception ex)
Console.WriteLine(ex.StackTrace);
【讨论】:
不包括消息或内部异常详细信息。【参考方案6】:是否没有像 Java 的 Log4J 那样可以将异常作为参数并为您处理所有事情的 C# Logging API?
即,使用 Log4NET。
【讨论】:
我认为它指出了为什么微软可能没有像 Java 那样在 C# 中提供这样的功能(作为在更简单的时代开发的旧语言)。即,推荐一种更好的方法。【参考方案7】:由于@ryan-cook 的回答对我不起作用,如果您想打印堆栈跟踪而不出现异常,您可以使用:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
很遗憾,这不能在 PCL 或 .NETStandard 库中完成
【讨论】:
【参考方案8】:另外看看 Log4Net...它是从 Log4J 到 .NET 的一个端口。
【讨论】:
以上是关于C# 相当于 Java 的 Exception.printStackTrace()?的主要内容,如果未能解决你的问题,请参考以下文章