Throwable.printStackTrace(PrintStream s)
마지막 줄 너머를 볼 수 있도록 전체 스택 추적 을 인쇄 하는 방법 이 "... 40 more"
있습니까?
답변
그럴 필요가 없습니다. 해당 정보는 스택 추적의 다른 곳에 있습니다. 문서에서 printStackTrace()
:
문자가 포함 된 줄이 있는지 확인합니다
"..."
. 이러한 행은이 예외에 대한 스택 추적의 나머지 부분이이 예외 ( “포함”예외)로 인해 발생한 예외의 스택 추적 맨 아래에서 표시된 프레임 수와 일치 함을 나타냅니다.이 약식은 “원인 예외”가 포착 된 것과 동일한 메서드에서 래핑 된 예외가 throw되는 일반적인 경우에 출력 길이를 크게 줄일 수 있습니다.
즉, "... x more"
연결 예외에만 표시되며 x
스택 추적 의 마지막 줄이 다른 연결 예외 스택 추적의 일부로 이미 존재 하는 경우에만 나타납니다 .
메소드가 예외 Foo를 포착하고이를 예외 Bar에 랩핑하고 Bar를 던진다 고 가정하십시오. 그러면 Foo의 스택 추적이 짧아집니다. 어떤 이유로 든 전체 트레이스를 원하면 ...
Foo의 스택 트레이스 앞의 마지막 줄을 가져와 Bar의 스택 트레이스에서 찾는 것입니다. 그 라인 아래의 모든 것은 Foo의 스택 트레이스에 인쇄되었을 것입니다.
답변
당신을위한 방법에 대한 빠른 추측.
static void printLongerTrace(Throwable t){
for(StackTraceElement e: t.getStackTrace())
System.out.println(e);
}
답변
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
입니다.
전체 스택 추적을 얻으려면 둘러싸는 예외 (및 둘러싸는 예외)의 프레임을 확인해야합니다.
- 생략 된 프레임 수를보십시오 : “… X more”
- 둘러싸는 예외에서 생략 된 프레임을 찾습니다.
- 생략 된 프레임 수를보십시오 : “… Y more”
- 스택 추적에 첫 번째 X-Y 프레임 추가
- Y> 0이면 생략 된 프레임 수로 2 단계를 반복합니다.
따라서 전체 스택 추적을 얻으려면 LowLevelException
다음을 수행합니다.
- 생략 된 프레임 수를보십시오. “… 3 개 더”
- 둘러싸는 예외 (
MidLevelException
)에서 생략 된 프레임을 찾습니다.
- 1 개의 프레임이 생략되었습니다 ( “… 1 개 더”)
- 스택 추적에 처음 2 (3-1) 프레임을 추가합니다.
- 생략 된 프레임 수로 1을 사용하여 2 단계를 반복합니다.
MidLevelException
(HighLevelException
) 의 둘러싸는 예외를보십시오.- 스택 추적에 처음 1 개 프레임 추가
전체 스택 추적은 다음과 같습니다.
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