.class 파일을 조작하고 있습니다. 나는 한 번에 하나씩 지침을 얻기 위해 InstrutionHandle 패키지를 사용하고 있습니다. 나는 getPosition() 메서드 을 통해 명령어의 바이트 오프셋을 가지고 있는데, 바이트 오프셋에서 소스 라인 번호를 얻을 수 있습니까?Java에서 바이트 오프셋에서 소스 코드의 행 번호를 얻으려면 어떻게해야합니까?
1
A
답변
2
클래스 파일이 디버깅 정보로 컴파일되는지 여부에 따라 다릅니다. 일반적으로 컴파일러는 LineNumberTable
속성을 삽입하여 바이트 코드의 각 범위에 해당하는 원래 소스 행 번호를 제공합니다. 그러나 LineNumberTable
속성은 메타 데이터 일 뿐이므로 제작자는 사소한 제약 조건으로 원하는 내용을 넣거나 완전히 생략 할 수 있습니다. (일반적으로 -g: none
으로 컴파일하거나 obfuscator를 실행하여 완료)
어쨌든 속성의 형식은 entires (2 바이트) 수와 그 다음에 (start pc, line number) 쌍 (둘 모두 2 바이트)이옵니다. LineNumberTable
속성을 여러 개 가질 수도 있습니다. 물론 라이브러리를 사용하고 있다면, 아마도 이것을 이미 해독 할 것입니다.