정확하게 javac의 -g:vars
(로컬 변수 디버깅 정보) 옵션이 출력으로 제공하는 것. 소스 라인 바르javac 디버깅 정보 옵션 -g : vars는 무엇을합니까?
않는다 어떤 하나 가지고 이러한 로컬 변수 디버깅 예 : 소스 라인 -g :
몇몇 시험을 수행
는 아무 추가 정보 (예 -g간에 차이 없다. 정보의 javadoc에서정확하게 javac의 -g:vars
(로컬 변수 디버깅 정보) 옵션이 출력으로 제공하는 것. 소스 라인 바르javac 디버깅 정보 옵션 -g : vars는 무엇을합니까?
않는다 어떤 하나 가지고 이러한 로컬 변수 디버깅 예 : 소스 라인 -g :
몇몇 시험을 수행
는 아무 추가 정보 (예 -g간에 차이 없다. 정보의 javadoc에서:
-g 지역 변수를 포함하여 모든 디버깅 정보를 생성 기본적으로 전용 라인 번호와 소스 파일 정보가입니다.이 생성되었습니다.
이것은 컴파일 타임에는 보이지 않지만 런타임에는 디버깅에 사용됩니다.
-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
당신은 지역 주민의 목록을 얻을 수 있습니다.
왜 알고 싶습니까? 다른 옵션이 설정된 경우 변수가 항상 포함될 수 있습니다. '-g : vars'를 옵션없이 비교해보십시오. –