Każdy definiowany fragment wymaga specyfikacji typu. Typ wskazuje, kiedy fragment będzie uruchamiany w docelowych metodach. Sonda może zawierać więcej niż jeden fragment, ale nie może zawierać więcej niż jednego fragmentu danego typu.
Typ fragmentu | Metody lub miejsca wywołania | Opis |
---|---|---|
entry | Metoda | Fragmenty typu entry uruchamiane po wejściu do metody. Fragmenty typu entry nie będą uruchamiane w przypadku metod wstawionych do klasy przez pakiet Probekit. |
exit | Metoda | Fragmenty typu exit są wykonywane przy wyjściu z metody (w przypadku wyjścia normalnego, gdy metoda zgłasza wyjątek lub gdy zgłoszony wyjątek jest propagowany poza metodę). Fragmenty exit nie są wykonywane w przypadku metod wstawionych do klasy przez pakiet Probekit. |
catch | Metoda | Fragmenty typu catch są wykonywane na początku klauzuli catch w metodzie lub na początku klauzuli finally wykonywanej w wyniku wystąpienia wyjątku. |
staticInitializer | Metoda | Fragmenty typu staticInitializer są wykonywane w inicjatorze każdej sondowanej klasy. Jeśli klasa nie ma jeszcze inicjatora static, zostanie on utworzony. Więcej informacji można znaleźć w sekcji Fragment sondy typu staticInitializer. |
executableUnit | Metoda | Fragmenty typu executableUnit są wykonywane przed każdą jednostką wykonywalną kodu w metodach, które odpowiadają specyfikacji dotyczącej miejsca docelowego i filtru sondy oraz w przypadku których dostępny jest kod źródłowy. Jeśli metoda nie zawiera informacji o wierszu kodu źródłowego, będzie istniała tylko jedna jednostka wykonywalna (o numerze zero). Więcej informacji można znaleźć w sekcji Fragment sondy typu executableUnit. |
beforeCall | Miejsce wywołania | Fragmenty typu beforeCall są wykonywane w metodzie wywołującej bezpośrednio przed wywołaniem metody docelowej. Nie dotyczy sond metody. |
afterCall | Miejsce wywołania | Fragmenty typu afterCall są wykonywane w metodzie wywołującej bezpośrednio po wyjściu z metody docelowej (w przypadku wyjścia normalnego oraz w przypadku zgłoszenia wyjątku przez metodę docelową). Nie dotyczy sond metody. |
Sonda może zawierać wiele fragmentów dotyczących tego samego miejsca w metodzie (np. fragment entry i pierwsze wystąpienie fragmentu executableUnit). Innym przykładem jest fragment catch i powiązane z nim wystąpienie fragmentu executableUnit, ponieważ klauzule catch obsługi wyjątków zawsze reprezentują początek nowej jednostki wykonywalnej. W takich przypadkach kod fragmentu executableUnit zostanie wykonany po kodzie fragmentu entry lub catch. Z tego powodu fragmenty entry (jeśli istnieją) zawsze będą wykonywane przed fragmentami innego rodzaju.
Jedna sonda nie może zawierać fragmentów dotyczących metody i fragmentów dotyczących miejsca wywołania, ale sondy metod i sondy miejsca wywołania mogą ze sobą sąsiadować w obrębie jednego pliku źródłowego pakietu Probekit (plik probe).
Aby określić typ fragmentu, należy wybrać pozycję Fragment w panelu drzewa na stronie Sondy i wybrać jedną z opcji na liście Typ fragmentu w panelu edycji.