2011-04-21 4 views
19

정확하게 javac의 -g:vars (로컬 변수 디버깅 정보) 옵션이 출력으로 제공하는 것. 소스 라인 바르javac 디버깅 정보 옵션 -g : vars는 무엇을합니까?

않는다 어떤 하나 가지고 이러한 로컬 변수 디버깅 예 : 소스 라인 -g :

몇몇 시험을 수행

는 아무 추가 정보 (예 -g간에 차이 없다. 정보의 javadoc에서

+0

왜 알고 싶습니까? 다른 옵션이 설정된 경우 변수가 항상 포함될 수 있습니다. '-g : vars'를 옵션없이 비교해보십시오. –

답변

14

:

-g 지역 변수를 포함하여 모든 디버깅 정보를 생성 기본적으로 전용 라인 번호와 소스 파일 정보가입니다.이 생성되었습니다.

이것은 컴파일 타임에는 보이지 않지만 런타임에는 디버깅에 사용됩니다.

26

-g:vars 옵션은 클래스 파일에 LocalVariableTable을 삽입합니다. 예를 들어,이 테스트 클래스 :

public class Test { 
    public static void main(String[] args) { 
     int mylocal = 1; 
     System.out.println("" + mylocal); 
    } 
} 

당신은 javap -l Test와 클래스 파일에 디버깅 정보를 살펴볼 수 있습니다. -g 인수가 없으면 LineNumberTable 만 있습니다. 이것은 JVM이 스택 트레이스에서 볼 수있는 줄 번호를 생성하기 위해 사용하는 것입니다. 이 이름과 스택에 위치하여 각 매개 변수와 지역 변수의 유형을 캡처

LocalVariableTable: 
Start Length Slot Name Signature 
0  3  0 args  [Ljava/lang/String; 
2  1  1 mylocal  I 

: 당신이 -g:vars 컴파일하는 경우는 다음과 같이 보이는 LocalVariableTable 지금이 알 수 있습니다.

원본을 사용할 수있는 경우 일반적으로 디버깅에이 작업이 필요하지 않습니다. 그러나 소스가 없다면 유용 할 수 있습니다. 예를 들어, 함께하고 -g:vars없이 jdb Test을 실행 클래스가 -g:vars로 컴파일 된 경우

Initializing jdb... 
> stop in Test.main 
Deferring breakpoint Test.main. 
It will be set after the class is loaded. 
> run 
main[1] next 
main[1] next 
main[1] locals 
Method arguments: 
args = instance of java.lang.String[0] (id=354) 
Local variables: 
mylocal = 1 

당신은 지역 주민의 목록을 얻을 수 있습니다.