Throwable.printStackTrace(PrintStream s)
마지막 줄 너머를 볼 수 있도록 전체 스택 추적 을 인쇄 하는 방법 이 "... 40 more"
있습니까?
Throwable.printStackTrace(PrintStream s)
마지막 줄 너머를 볼 수 있도록 전체 스택 추적 을 인쇄 하는 방법 이 "... 40 more"
있습니까?
답변:
그럴 필요가 없습니다. 해당 정보는 스택 추적의 다른 곳에 있습니다. 문서에서 printStackTrace()
:
문자가 포함 된 줄이 있는지 확인합니다
"..."
. 이러한 행은이 예외에 대한 스택 추적의 나머지 부분이이 예외 ( "포함"예외)로 인해 발생한 예외의 스택 추적 맨 아래에서 표시된 프레임 수와 일치 함을 나타냅니다.이 약식은 "원인 예외"가 포착 된 것과 동일한 메서드에서 래핑 된 예외가 throw되는 일반적인 경우에 출력 길이를 크게 줄일 수 있습니다.
즉, "... x more"
연결 예외에만 표시되며 x
스택 추적 의 마지막 줄이 다른 연결 예외 스택 추적의 일부로 이미 존재 하는 경우에만 나타납니다 .
메소드가 예외 Foo를 포착하고이를 예외 Bar에 랩핑하고 Bar를 던진다 고 가정하십시오. 그러면 Foo의 스택 추적이 짧아집니다. 어떤 이유로 든 전체 트레이스를 원하면 ...
Foo의 스택 트레이스 앞의 마지막 줄을 가져와 Bar의 스택 트레이스에서 찾는 것입니다. 그 라인 아래의 모든 것은 Foo의 스택 트레이스에 인쇄되었을 것입니다.
Throwable.printStackTrace () 문서에서 스택 추적을 가져옵니다 .
HighLevelException: MidLevelException: LowLevelException
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
at Junk.c(Junk.java:23)
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
... 1 more
Caused by: LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
... 3 more
원인은 맨 아래에 가장 많이 중첩 된 원인 ( "근본 원인")부터 인쇄 된 스택 추적이 속한 원인까지 표시됩니다.
이 경우 근본 원인은 LowLevelException
원인 MidLevelException
, 원인 HighLevelException
입니다.
전체 스택 추적을 얻으려면 둘러싸는 예외 (및 둘러싸는 예외)의 프레임을 확인해야합니다.
따라서 전체 스택 추적을 얻으려면 LowLevelException
다음을 수행합니다.
MidLevelException
)
에서 생략 된 프레임을 찾습니다.MidLevelException
( HighLevelException
) 의 둘러싸는 예외를보십시오.전체 스택 추적은 다음과 같습니다.
LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
// From MidLevelException stack trace
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
// From HighLevelException stack trace
at Junk.main(Junk.java:4)
참고 사항 :
다음과 같이 프레임이 나열되지 않은 경우가있을 수 있습니다.
HighLevelException: MidLevelException
at Junk.main(Junk.java:4)
Caused by: MidLevelException
... 1 more
원인이 같은 줄에 생성 된 경우 발생할 수 있습니다 new HighLevelException(new MidLevelException())
.. 이것에 대해 혼동하지 마십시오. 위에서 설명한 접근 방식은 여전히 작동합니다. 예외에서 사용할 프레임이 없으며 둘러싸는 프레임을 계속합니다.
어떤 경우에는 생략되지 않은 첫 번째 프레임 (위의 줄 ... X more
) 을보고 계산을 직접 저장할 수 있습니다 . 해당 줄에서 메서드를 호출하는 메서드를 알고있는 경우 둘러싸는 예외의 프레임에서 호출자를 직접 검색 할 수 있습니다.
HighLevelException: MidLevelException: LowLevelException
at Junk.c(Junk.java:29)
at Junk.b(Junk.java:21)
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException
// You know Junk.d is only called by Junk.b
at Junk.d(Junk.java:35)
... 3 more
...
이 다른 첫 번째 프레임입니다. 그러나 적어도 그것을 찾는 데 도움이되는 동일한 클래스에있을 것입니다.