Probekit - это среда на основе платформы Eclipse, с помощью которой можно создавать
датчики и работать с ними. Датчики - это фрагменты кода Java™, которые можно вставлять в программу для
получения сведения о программе в ходе ее выполнения.
Для простоты изложения ниже приведен пример простого датчика, который выдает сообщения с именами методов,
вызываемых в ходе выполнения программы.
Датчики задаются с помощью записей, создаваемых в редакторе
Probekit. Данный пример состоит из одного фрагмента;
фрагменты
определяют назначение датчика. В состав определения фрагмента входит следующая
информация:
- Определение
типа фрагмента. Данный фрагмент представляет собой фрагмент входа,
который выполняется во время запуска метода.
- Элементы данных, доступные для фрагмента. В данном случае
фрагмент может обращаться к именам классов и методов.
- Фрагмент кода Java, определяющий логику датчика. Данный фрагмент
вызывает функцию System.out.println для отображения имен класса и метода.
В редакторе Probekit датчик выглядит следующим образом:

Датчик, созданный с помощью редактора Probekit, можно добавить в файлы class и jar
проекта. При запуске проекта фрагмент кода выполняется вместе с программой.
Ниже приведены инструкции по созданию датчиков и работе с ними. Кроме
того, приведена информация об эффективной работе со средой Probekit:
- Редактор
Probekit позволяет создавать датчики в исходных файлах Probekit.
Исходные файлы Probekit имеют расширение .probe. Они могут содержать
один или несколько датчиков, каждый из которых может содержать один или несколько
фрагментов датчика.
- Среда Probekit собирает фрагменты датчиков в набор методов Java с их последующей
компиляцией. В процессе компиляции датчика среда Probekit объединяет отдельные
фрагменты с заготовками кода Java и создает исходный код Java для нового класса датчика. Созданные
из фрагментов датчика функции отображаются как статические методы нового класса датчика.
- Применение датчика предусматривает указание целевого класса, а также файлов jar,
которые нужно исследовать. При этом служба BCI сверяется со списком
доступных датчиков и их целевыми шаблонами и встраивает вызовы методов фрагментов
датчиков в
целевые программы. Процесс встраивания операторов вызова в целевые методы называется
также инструментацией. Класс, содержащий такой метод называется
изучаемым классом. Элементы данных, необходимые для фрагментов датчика
(например, имя метода и имя класса), передаются в виде аргументов.
- После того как инструментарий добавит датчики в программу, датчики начинают выполняться вместе с ней.
Момент запуска фрагмента определяется
типом фрагмента датчика. Вы
можете указать тип датчика, позволяющий запустить его в одном из следующих случаев:
- Во время входа в метод.
- Во время выхода из метода (нормального или в результате исключительной ситуации).
- При обработке исключительных ситуаций, то есть, в начале выполнения оператора
catch или оператора finally, вызванного для обработки исключительной
ситуации.
- Перед оригинальным кодом статического инициализатора класса.
- Перед любым исполняемым модулем кода (когда доступна информация об исходном коде).
- При вызове конкретных методов. (В этом случае инструментация
выполняется в вызывающей системе, а не внутри вызываемого метода).
Датчики могут получать различную информацию о состоянии приложения на те
моменты времени, в которые они срабатывают. Например:
- пакет, класс и имя метода
- сигнатура метода
- объект this
- аргументы
- значение возврата
При необходимости датчики можно добавить только в конкретные классы и методы. Для этого необходимо указать
целевые объекты или настроить фильтры. Дополнительные сведения приведены в разделе
Фильтры и целевые объекты датчиков.