Có phương pháp tương đương C # với Java không Exception.printStackTrace()
hay tôi phải tự viết thứ gì đó, làm việc theo cách của tôi thông qua Nội ngoại lệ?
Câu trả lời:
Thử đi:
Console.WriteLine(ex.ToString());
Từ http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx :
Việc triển khai mặc định của ToString nhận được tên của lớp đã ném ngoại lệ hiện tại, thông báo, kết quả của việc gọi ToString trên ngoại lệ bên trong và kết quả của việc gọi Environment.StackTrace. Nếu bất kỳ thành viên nào trong số này là null, giá trị của nó không được bao gồm trong chuỗi trả về.
Lưu ý rằng trong đoạn mã trên, cuộc gọi đến ToString
không bắt buộc vì có quá tải phải nhận System.Object
và gọi ToString
trực tiếp.
Như Drew nói, chỉ cần chuyển đổi ngoại lệ một chuỗi sẽ làm được điều này. Ví dụ, chương trình này:
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");
}
}
Tạo ra đầu ra này:
System.Exception: Outer ---> System.Exception: Inner
at Test.ThrowException2()
at Test.ThrowException()
--- End of inner exception stack trace ---
at Test.ThrowException()
at Test.Main()
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine (myException.StackTrace);
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
Không có API ghi nhật ký C # nào có thể lấy Ngoại lệ làm đối số và xử lý mọi thứ cho bạn, giống như Log4J của Java làm?
Tức là, sử dụng Log4NET.
Vì câu trả lời @ ryan-cook không phù hợp với tôi, nếu bạn muốn in dấu vết ngăn xếp mà không có ngoại lệ, bạn có thể sử dụng:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
Rất tiếc, điều này không thể thực hiện được trong PCL hoặc trong Thư viện .NETStandard