2011-11-02 6 views
1

asm 라이브러리를 사용하여 메소드의 바이트 코드를 인쇄하고 싶습니다.TraceClassVisitor의 출력 형식 지정

이제
// access flags 0x1 
    public get777()I 
    L0 
    LINENUMBER 21 L0 
    SIPUSH 777 
    IRETURN 
    L1 
    LOCALVARIABLE this Lsomething/Point; L0 L1 0 
    MAXSTACK = 1 
    MAXLOCALS = 1 
} 

는 것은 내가 단지

SIPUSH 777 
    IRETURN 

다른 모든 것을 나에게 크게 관련이없는 것에 대해 관심이 있다는 것입니다으로 TraceClassVisitor을 통해

public int get777() { return 777; } 

는 볼 것이다, 그래서 나는 닦아 할 아웃.

TraceMethodVisitor을 상속하여 원하지 않는 것들을 필터링하려고 생각했지만 실제로 최종 클래스 (버머!)가되었습니다.

TraceClassVisitor의 출력 형식을 지정하는 방법이 있습니까? 그렇지 않다면, 내가 신경 쓰지 않는 것들을 걸러 낼 수있는 가장 좋은 방법은 무엇이라고 생각하십니까?

답변

1

ClassReader.SKIP_DEBUG 플래그를 ClassReader.accept() 메서드에 전달하여 줄 번호와 지역 변수 정보를 제거 할 수 있습니다.

다른 접근 방법은 방문자가 출력물에서보고 싶지 않은 이벤트를 삼키는 TraceClassVisitor 및 TraceMethodVisitor 앞에 방문자를 추가하는 것입니다.

+0

ClassReader.SKIP_DEBUG는 정상적으로 작동하는 것 같습니다! EmptyVisitor가 ASM 4.0에서 사라진 이유가 궁금합니다. –

0

내 표준 접근법 : 소스 코드를 가져오고, search'n'replace->class을 다시 컴파일하십시오.

+0

그래, 나는 소스 코드 ATM을보고있다. –

+0

최종본을 컴파일하지 않고 컴파일하고 새로운 JAR 파일을 만듭니다. 또는 클래스의 이름을 바꾸고 프로젝트를 추가하십시오. –