System.out.println()
는 매우 강력하고 사랑받는 디버깅 도구이다. 문제는, 이 코드를 디버그할 때는 잘 사용하고, 그 후에는 지우지 않는다는 점이다.
이런 일이 몇번 정도 반복되면, 불필요한 메시지가 콘솔에 무더기로 출력되어 꼭 필요한 디버깅 메시징을 보기가 힘들어지는 불상사가 벌어질 수 있다. 그러나 메시지를 어디서 출력하였는지 추적하는 것은 매우 힘들다. 시스템 콘솔 출력은 디버그를 이용하여 추적하는 것도 불가능하다. 방대한 양의 소스코드를 일일히 검색하는 것도 쉬운 일은 아니며, 또 메시지는 동적으로 생성된 것이어서 검색이 불가능 할 수도 있다.
이런 경우, 아래와 같은 간단한 디버깅 툴을 삽입해 이 문제를 해결 할 수 있다:
/** * @author Jeeeyul 2011. 11. 1. 오후 4:36:51 * @since M1.10 */ public class DebugStream extends PrintStream { private static final DebugStream INSTANCE = new DebugStream(); public static void activate() { System.setOut(INSTANCE); } private DebugStream() { super(System.out); } @Override public void println(Object x) { showLocation(); super.println(x); } @Override public void println(String x) { showLocation(); super.println(x); } private void showLocation() { StackTraceElement element = Thread.currentThread().getStackTrace()[3]; super.print(MessageFormat.format("({0}:{1, number,#}) : ", element.getFileName(), element.getLineNumber())); } }
위와 같은 클래스를 하나 만든 뒤, DebugStream.activate()
를 적절한 시점에 호출 해 주면 된다. 이 후로 System.out.println
을 통해 출력되는 메시지는 다음과 같이 보이게 된다:
(SemanticPatchSystem.java:47) : 세만틱 패치 수정 시작 (AbstractDiagramEditor.java:1140) : 메시지
이 형태로 인쇄한 경우, 콘솔에서 곧바로 클릭하여 해당 소스코드를 볼 수 있게 된다.
'자바·JSP' 카테고리의 다른 글
Java Application 중복 실행 방지 (0) | 2012.09.25 |
---|---|
[Java] Class.forName(String className) (0) | 2012.09.03 |
솔라리스에서 64bit JDK설치 (0) | 2012.05.31 |
이클립스 사용시 유용한 팁과 단축키 (0) | 2012.05.31 |
두 날짜 사이의 날짜들 구하기 (1) | 2012.05.24 |