methodLineTables 데이터 문자열 형식

methodLineTables 데이터 문자열은 클래스에 있는 모든 실행 가능 단위에 대해 하나의 항목으로 테이블을 인코딩합니다.

methodLineTables 테이블에 있는 각 항목의 값은 대응하는 실행 가능 단위에 대한 행 번호(classSourceFile 데이터 문자열에 의해 이름 지정되는 소스 파일에 있음)입니다. 예를 들어, 테이블의 항목 번호 5는 실행 가능 단위 번호 5에 대한 행 번호를 제공합니다.

다음은 methodLineTables 문자열의 예제입니다.
#51+1201#75+11,41
다음은 문자열을 해석하는 방법입니다.
  • 번호 부호("#") 바로 다음에 오는 숫자는 클래스의 소스 코드에 있는 절대 행 번호를 나타냅니다. 이 예제에서 클래스의 첫 번째 메소드에 있는 첫 번째 실행 가능 단위는 51행에 있습니다.
  • 더하기 부호("+") 다음에 오는 각 단일 숫자는 다음 실행 가능 단위에 대한 행 번호를 생성하기 위해 이전 행 번호에 추가하는 행 수를 나타냅니다. 이 예제에서 더하기 부호 다음에 오는 숫자(+1201)는 두 번째부터 다섯 번째 실행 가능 단위까지의 행 번호를 계산하는 데 사용됩니다.
    1. 51 + 1 = 두 번째 실행 가능 단위 행 번호: 52
    2. 52 + 2 = 세 번째 실행 가능 단위 행 번호: 54
    3. 54 + 0 = 네 번째 실행 가능 단위 행 번호: 54(하나의 소스 행에 있는 두 개의 실행 가능 단위)
    4. 54 + 1 = 다섯 번째 실행 가능 단위 행 번호: 55
  • 행 번호 증분이 음수이거나 10 이상일 때, 실행 가능 단위에 대한 절대 행 번호가 지정됩니다. 이 예제에서 6번째 실행 가능 단위는 55인 이전 행 번호보다 20 더 큰 75행에 있습니다. 이러한 경우, 6번째 실행 가능 단위에 대해 절대 행 번호가 지정되고 상대 행 번호 계산이 다시 시작됩니다(#75+11).:
    1. 75 = 6번째 실행 가능 단위 행 번호
    2. 75 + 1 = 7번째 실행 가능 단위 행 번호: 76
    3. 76 + 1 = 8번째 실행 가능 단위 행 번호: 77
  • 쉼표(",")는 한 메소드의 종료와 다음 메소드의 시작을 나타냅니다. 쉼표 다음에 오는 숫자와 기호는 이전대로 해석됩니다. 이 예제에서 두 번째 메소드의 첫 번째 실행 가능 단위 행 번호는 이전 메소드에 대해 계산된 마지막 행 번호보다 단지 4가 더 크므로, 쉼표(,41) 다음에 상대 행 번호 계산이 계속 수행됩니다.
    1. 77 + 4 = 두 번째 메소드의 첫 번째 실행 가능 단위 행 번호: 81
    2. 81 + 1 = 두 번째 메소드의 두 번째 실행 가능 단위 행 번호: 82
참고: 모든 실행 가능 단위가 연관된 소스 정보를 갖지는 않습니다. 일부는 컴파일러에 의해 Java 언어의 의미(예: 예외 처리, 초기화 또는 동기화)를 구현하도록 작성됩니다. 이렇게 생성된 실행 가능 단위는 methodLineTables 문자열에서 절대 행 번호 0을 가집니다. 절대 행 번호 0은 행 번호 정보가 사용 가능하지 않음을 나타냅니다. 전체 메소드에 소스 정보가 없을 때 행 번호 0에 해당하는 단일 실행 가능 단위가 있는 것으로 나타납니다.
다음은 methodLineTables 문자열의 몇 가지 추가 예제와 그 의미를 보여줍니다.
methodLineTables 문자열 의미
+5 첫 번째 메소드의 첫 번째 실행 가능 단위 행 번호가 10 미만인 경우, 전체 문자열은 더하기 기호로 시작하여 0행부터 증분 시리즈를 시작합니다. 이 예제에서 첫 번째 메소드의 첫 번째 실행 가능 단위는 5행에서 시작합니다.
+0 첫 번째 메소드에 소스 정보가 없는 경우, 문자열은 +0으로 시작합니다. 이러한 메소드에 적용되는 모든 executableUnit 프로브 단편은 메소드 시작 부분에서 한 번만 삽입됩니다.
...#437,#457+123... 메소드의 첫 번째 실행 가능 단위가 이전 메소드의 마지막 실행 가능 단위에서 10행 이상 뒤에 시작하는 경우, 이 패턴은 새 메소드의 첫 번째 실행 가능 단위에 대한 쉼표, 번호 부호, 행 번호 문자열입니다. 이 부분 예제에서 새 메소드의 첫 번째 실행 가능 단위는 이전 메소드의 마지막 실행 가능 단위에서 20행 뒤에 시작합니다.
...#437,+2... 메소드의 마지막 실행 가능 단위에 "#" 표시가 필요하고 그 다음 메소드의 첫 번째 실행 가능 단위가 약간 떨어져 있게 될 가능성이 있습니다. 이 부분 예제에서 한 메소드의 마지막 실행 가능 단위는 437행에서 시작하고 그 다음 메소드의 첫 번째 실행 가능 단위는 439행에서 시작합니다.
관련 참조
프로브 단편