Java의 Exception.printStackTrace ()에 해당하는 C #?


83

Java와 동등한 C # 메소드가 Exception.printStackTrace()있습니까? 아니면 InnerExceptions를 통해 작업하면서 직접 작성해야합니까?

답변:


120

이 시도:

Console.WriteLine(ex.ToString());

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

ToString의 기본 구현은 현재 예외를 발생시킨 클래스의 이름, 메시지, 내부 예외에서 ToString을 호출 한 결과 및 Environment.StackTrace를 호출 한 결과를 가져옵니다. 이러한 멤버 중 하나라도 null이면 해당 값이 반환 된 문자열에 포함되지 않습니다.

위의 코드에서는 직접 받아 호출 ToString하는 오버로드가 있으므로 호출 이 필요하지 않습니다 .System.ObjectToString


1
방금 Linux의 .Net Core 2.1에서 시도했지만 더 이상 사실이 아닌 것 같습니다
selalerer

104

추가하고 싶습니다 : 예외 외부에 스택을 인쇄하려면 다음을 사용할 수 있습니다.

Console.WriteLine(System.Environment.StackTrace);

10

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()


1
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}

1
여기에는 메시지 또는 내부 예외 세부 정보가 포함되지 않습니다.
Drew Noakes

0

Java의 Log4J처럼 예외를 인수로 받아 모든 것을 처리 할 수있는 C # 로깅 API가 없습니까?

즉, Log4NET을 사용하십시오.


나는 그것이 마이크로 소프트가 자바가 제공했던 기능을 C #에서 제공하지 않았을 수있는 이유를 지적한다고 생각한다 (더 단순한 시대에 개발 된 오래된 언어이기 때문이다). 즉, 권장되는 더 나은 방법이 있습니다.
JeeBee

0

@ ryan-cook 대답이 나를 위해 작동하지 않았기 때문에 예외없이 스택 추적을 인쇄하려면 다음을 사용할 수 있습니다.

System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)

불행히도 이것은 PCL이나 .NETStandard 라이브러리에서 수행 할 수 없습니다.


-1

또한 Log4Net을보십시오. Log4J에서 .NET으로의 포트입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.