Java 스택 추적 덤프의 표시되는 행 수를 늘리려면 어떻게합니까?
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())
.. 이것에 대해 혼동하지 마십시오. 위에서 설명한 접근 방식은 여전히 작동합니다. 예외에서 사용할 프레임이 없으며 둘러싸는 프레임을 계속합니다.In some cases you can save yourself the counting by looking at the first frame which was not omitted (the line above
... X more
). If you know which methods call the method in that line you can directly search for the callers in the frames of the enclosing exception: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
'programing tip' 카테고리의 다른 글
0.0과 1.0 사이에는 몇 개의 이중 숫자가 있습니까? (0) | 2020.09.04 |
---|---|
오픈 소스 Java 프로파일 러 (0) | 2020.09.04 |
CSS를 사용하여 div 하단의 정렬 버튼 (0) | 2020.09.03 |
엔티티 프레임 워크에서 생성 된 클래스에 데이터 주석 추가 (0) | 2020.09.03 |
HTML5 이메일 유효성 검사 (0) | 2020.09.03 |