Probedoelspecificaties

Een doelspecificatie geeft de klassen en methoden aan waarop de probe van toepassing is.

De doelspecificatie is optioneel. Als er geen doel is opgegeven, wordt de probe toegepast op alle klassen die worden verwerkt door de instrumentatie-engine.

Aan de hand van een doelspecificatie kunt u filters maken voor het opnemen of uitsluiten van methoden bij instrumentatie op basis van patronen die worden gezocht in pakketten, klassen, methodenamen en handtekeningen van methoden. De zoekpatronen kunnen jokertekens bevatten, waarbij "*" overeenkomt met nul of meer tekens.

Als het jokertekenpatroon van een doel overeenkomt met het pakket, de klasse, de naam of de handtekening van een methode, bepaalt de eigenschap type of de methode wordt geïnstrumenteerd (include) of niet (exclude). Als het patroon niet overeenkomt met het pakket, de klasse, de naam of de handtekening van een methode, wordt de methode standaard geïnstrumenteerd.

Het doel heeft onder meer de volgende eigenschappen:
Eigenschap Beschrijving
type Verplicht. De eigenschap type bepaalt of een probe wordt toegepast op een doelmethode. Door include op te geven past u de probe toe op klassen en patronen die overeenkomen met het zoekpatroon met jokertekens. Met exclude sluit u ze uit.
package Optioneel. U geeft een zoekpatroon met jokertekens op dat overeen moet komen met het pakketgedeelte van de klassennamen. Een voorbeeld: java.util* komt overeen met alle klassen in het pakket java.util en de subpakketten. Als u niets opgeeft, is de standaardwaarde *.
className Optioneel. U geeft een zoekpatroon met jokertekens op dat overeen moet komen met klassennamen. Als u niets opgeeft, is de standaardwaarde *.
method Optioneel. U geeft een zoekpatroon met jokertekens op dat overeen moet komen met methodenamen. Als u niets opgeeft, is de standaardwaarde *.
signature Optioneel. U geeft een zoekpatroon met jokertekens op dat overeen moet komen met een methodehandtekening. (De handtekening is de tekenreeks die de argumenten en het retourtype van de methode aangeeft.) Gebruik de interne Java-indeling voor methodehandtekeningen. Een voorbeeld: (Ljava/lang/Object;)D is de handtekening van een methode die een object als parameter ontvangt en een dubbelbytegetal retourneert. U kunt dit zoekpatroon gebruiken om onderscheid te maken tussen overbelaste methoden. Als u niets opgeeft, is de standaardwaarde *.

Opmerkingen:

  • Een probe kan meerdere doelspecificaties bevatten met opeenvolgende regels voor het zoeken van doelmethoden. Om een probe alleen op bepaalde methoden toe te passen geeft u eerst de methoden op die u wilt opnemen en vervolgens voegt u een laatste doelspecificatie toe: package=* className=* method=* signature=* type=exclude.
  • De pakket- en klassennamen die u opgeeft worden ook vergeleken met de pakket- en klassennamen van andere interfaces die een klasse implementeert. java.util.HashMap implementeert bijvoorbeeld de interface java.util.Map. Als een probe het pakket java.util, de klassennaam Map en de methodenaam size als doel heeft, wordt de probe toegepast op java.util.HashMap.size() en de methode size van alle andere klassen die de interface Map implementeren.
  • Bij het zoeken naar overeenkomsten wordt geen rekening gehouden met overervingsrelaties. Als de klasse Derived de klasse Base uitbreidt en een probe zich richt op Base.run(), wordt de probe niet automatisch toegepast op Derived.run().
  • Als het pakketpatroon in de doelspecificatie uit één punt bestaat ("."), verwijst dit naar een algemeen, onbenoemd Java-pakket. Hiermee kunt u zich expliciet op klassen in het algemene pakket richten.
  • Bij externe probes wordt met zoekpatronen en regels gezocht naar overeenkomsten voor het pakket, de klasse, de naam en de handtekening van een aangeroepen methode. De overeenkomst wordt voor een aangeroepen methode gezocht in de vorm zoals deze ten tijde van het compileren was, dat wil zeggen aan de hand van de bekende statische klassen- en methodenaam en niet de feitelijke methoden die worden aangeroepen bij overerving en virtuele functies. Als de aanroep wordt gedaan via een interfaceverwijzing, moet de naam van de interface overeenkomen.
Voorbeeld:

Om een doel op te geven kiest u Doel in het structuuroverzicht van de pagina Probes en klikt u op Toevoegen en Bewerken in het bewerkingsvenster.

In het voorbeeld is de probe alleen van toepassing op de methoden die beginnen met Get in de klassen die beginnen met Proxy in het pakket com.example. Doelitems van de typen opname en uitsluiting; het item voor uitsluiting gebruikt sterretjes om alles uit te sluiten; het item voor opname geeft exact de methoden aan die als doel fungeren. Alle andere klassen en methoden worden uitgesloten van instrumentatie.