자바로 작성한 프로그렘에서 에러 발생시 트레이스 정보에는 에러가 발생한 라인수가 표시된다. 그런데 라인수가 표시되어야 할 부분에 "Unknown Source"라고 표시 되기도 하는데 이는 컴파일시에 디버깅 정보를 포함시키는 옵션을 넣지 않아서 그렇다.
javac -g *.java
ant 사용시
<javac srcdir="${src.dir}" debug="yes" destdir="${class.dir}" />
자바에서 Stack Trace 내 보통 소스 파일과 라인 번호가 있어야 할 자리에
Unknown Source가 자리할 수 있다.
다음은 이를 테스트하기 위한 코드이다.
Unknown Source 테스트 코드
public class ExceptionUnknownSourceTest {
public static void main(String[] args) {
throw new RuntimeException();
}
}
컴파일 후 실행하면 다음과 같다.
$ javac ExceptionUnknownSourceTest.java
$ java ExceptionUnknownSourceTest
Exception in thread "main" java.lang.RuntimeException
at ExceptionUnknownSourceTest.main(ExceptionUnknownSourceTest.java:3)
$
예상한대로 소스 파일과 라인 번호가 출력됨을 확인할 수 있다.
하지만 컴파일 시에 -g:none 옵션으로 디버그 정보를 제거 후 실행하면 다음과 같다.
$ javac -g:none ExceptionUnknownSourceTest.java
$ java ExceptionUnknownSourceTest
Exception in thread "main" java.lang.RuntimeException
at ExceptionUnknownSourceTest.main(Unknown Source)
$
Unknown Source가 출력됨을 확인할 수 있다.
참고로 Obfuscator를 사용하면 디버그 정보가 제거된다.
References:
http://stackoverflow.com/questions/3132302/unknown-source-in-exception-stack-trace
http://java.sun.com/docs/books/performance/1st_edition/html/JPDeployment.fm.html
http://viralpatel.net/blogs/protect-java-code-decompilation-using-java-obfuscator/
'dev > java' 카테고리의 다른 글
자바(JDK, JRE) 모든 버전 다운로드( 6,7,8,9,10,11,12,13,14,15, 16, 17,18,19,20,21) (8) | 2024.01.01 |
---|---|
Java, 안드로이드 PKIX path building failed 에러 원인 및 해결 방법 (1) | 2022.05.10 |
자바 BCI란 뭘까? - Java BCI (Byte Code Instrumentation) #1 (1) | 2021.08.30 |
자바(JDK, JRE) 쉽고 빠른 설치, 환경 설정 방법 (1) | 2021.08.10 |
자바 해시 테이블( Hashtable), 해시 맵(HashMap) 구조와 원리 (1) | 2021.07.10 |
자바 AOP - AspectJ에 대해서 - Java AOP #5 (0) | 2021.02.16 |
자바 AOP - 이제 CGLIB를 사용해봅시다 - Java AOP #4 (0) | 2021.02.16 |
자바 AOP - CGLIB에 사용되는 ASM을 알아보자 - Java AOP #3 (0) | 2021.02.16 |