티스토리 뷰

dev/java

Java Unknown Source 이유, 원인

IT's me 2021. 11. 17. 22:58

자바로 작성한 프로그렘에서 에러 발생시 트레이스 정보에는 에러가 발생한 라인수가 표시된다. 그런데 라인수가 표시되어야 할 부분에 "Unknown Source"라고 표시 되기도 하는데 이는 컴파일시에 디버깅 정보를 포함시키는 옵션을 넣지 않아서 그렇다.

 

Java 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/


댓글
최근에 올라온 글
최근에 달린 댓글