Формат строки methodLineTables

Строка данных methodLineTables кодирует таблицу с одной записью для каждого исполняемого модуля класса.

Значение каждой записи в таблице methodLineTables соответствует номеру строки в исходном файле, на который ссылается строка данных classSourceFile, содержащая номер исходной строки исполняемого модуля. Например, пятая запись таблицы соответствует пятой строке исполняемого модуля.

Пример строки methodLineTables:
#51+1201#75+11,41
Что означает эта запись:
  • Цифры, следующие сразу после символа решетки ("#"), представляют собой полный номер строки в исходном коде для класса. В данном примере первый исполняемый модуль в первом методе класса находится на строке 51.
  • Каждая цифра за знаком плюса ("+") соответствует числу строк, которые следует добавить к предыдущему номеру строки для получения номера строки следующего исполняемого модуля. В приведенном примере цифры вслед за знаком плюса (+1201) используются для подсчета номеров строк для исполняемых модулей со второго по пятый:
    1. 51 + 1 = 52 - номер строки второго исполняемого модуля
    2. 52 + 2 = 54 - номер строки третьего исполняемого модуля
    3. 54 + 0 = 54 - номер строки четвертого исполняемого модуля (два исполняемых блока в одной строке исходного кода)
    4. 54 + 1 = 55 - номер строки пятого исполняемого модуля
  • Если значение для увеличения номера строки является отрицательным или превышает 9, то задается полный номер строки исполняемого модуля. В нашем примере шестой исполняемый модуль находится на строке 75, что на 20 превышает номер строки предыдущего исполняемого модуля, равный 55. В этом случае для шестого исполняемого модуля следует указать полный номер строки, после чего вновь начнется относительный подсчет номера строки (#75+11):
    1. 75 = номер строки шестого исполняемого модуля
    2. 75 + 1 = 76 - номер строки седьмого исполняемого модуля
    3. 76 + 1 = 77 - номер строки восьмого исполняемого модуля
  • Запятая (",") означает завершение одного метода и начало другого. Цифры и символы, следующие за запятой, обрабатываются также, как и раньше. В нашем примере номер строки первого исполняемого модуля второго метода на 4 превышает последний номер строки, подсчитанный для первого метода, таким образом относительный подсчет номера строки продолжается после запятой(,41):
    1. 77 + 4 = 81 - номер строки первого исполняемого модуля второго метода
    2. 81 + 1 = номер строки второго исполняемого модуля второго метода: 82
Примечание:Информация об исходном коде может быть указана не для всех исполняемых модулей. Некоторые из них создаются компилятором и используют семантику языка Java. Например, для обработки исключительных ситуаций, инициализации или синхронизации. Такие исполняемые модули будут иметь полный номер строки, равный нулю в строке methodLineTables. Равный нулю полный номер строки указывает, что сведения о номере строки недоступны. Если метод не содержит информации о номерах строк, у него будет лишь один исполняемый модуль под номером ноль.
Ниже приведены дополнительные примеры строк methodLineTables и их значения:
Строка methodLineTables Значение
+5 Если номер строки первого исполняемого модуля первого метода меньше десяти, то строка начинается с символа плюса, и отсчет идет с нулевой строки. В этом примере номер строки первого исполняемого модуля будет равен 5.
+0 Если у первого метода отсутствует информация об исходном коде, то строка начинается с +0. Все фрагменты датчика executableUnit, применяемые к такому методу, будут вставлены только один раз, в начало метода.
...#437,#457+123... Если первый исполняемый модуль метода начинается спустя более чем 9 строк после последнего исполняемого модуля предыдущего метода, следует использовать запятую, знак плюса и номер строки для первого исполняемого модуля нового метода. В данном примере первый исполняемый модуль начинается спустя 20 строк после последнего исполняемого модуля предыдущего метода.
...#437,+2... Для последнего исполняемого модуля метода можно использовать знак решетки ("#"), тогда как первый исполняемый модуль следующего метода находится на небольшом удалении от него. В данном примере последний исполняемый модуль одного метода начинается на строке 437, а первый исполняемый модуль следующего метода начинается на строке 439.
Связанные справочники
Фрагменты датчиков