Probmålspecifikationer

En målspecifikation anger de klasser och metoder som proben ska användas på.

Målspecifikationen är valfri. När inget mål har angetts kommer proben att användas på alla klasser som bearbetas av instrumentationsmotorn.

Med målspecifikationen kan du skapa filterregler som inkluderar eller utesluter metoder från instrumentationen beroende på mönster som matchas mot paket, klass och metodnamn, samt metodens signatur. Mönstren kan innehålla jokertecken där "*" matchar noll eller fler tecken.

Om målets jokerteckenmönster stämmer med metodens paket, klass, namn och signatur bestämmer egenskapen type om metoden instrumenteras (include) eller inte (exclude). Om mönstren inte matchar metodens paket, klass, namn och signatur instrumenteras metoden som standard.

Följande målegenskaper finns:
Egenskap Beskrivning
type Krävs. Med egenskapen type bestämmer du om en prob ska användas på en målmetod. Ange include om du vill använda proben på klasser och metoder som stämmer med jokerteckenmönstren. Använd exclude om du vill utesluta dem.
package Valfritt. Ange ett jokerteckenmönster som ska matchas mot paketdelen i klassnamn.Exempel: java.util* matchar alla klasser i java.util-paketet och dess delpaket. Om du inte anger något är standardvärdet *.
className Valfritt. Ange ett jokerteckenmönster som matchas mot klassnamnen. Om du inte anger något är standardvärdet *.
method Valfritt. Ange ett jokerteckenmönster som matchas mot metodnamnen. Om du inte anger något är standardvärdet *.
signature Valfritt. Ange ett jokerteckenmönster som matchas mot metodens signatur. (signature är den sträng som representerar metodens argument och returtyp.) Använda internt Java-format för metodsignaturer. Exempel: (Ljava/lang/Object;)D är signaturen för en metod som kan använda Object som parameter och som returnerar Double. Det här jokerteckenmönstret kan användas till att urskilja överbelastade metoder. Om du inte anger något är standardvärdet *.

Obs!

  • En prob kan ha flera målspecifikationer som innehåller efterföljande målregler. Om du bara vill använda en prob på vissa metoder anger du först de metoder som du vill inkludera och lägger sedan till en slutlig målspecifikation package=* className=* method=* signature=* type=exclude.
  • De paket och klassnamn som du anger kontrolleras även mot paket och klassnamn i eventuella gränssnitt som en klass implementerar. java.util.HashMap implementerar t.ex. gränssnittet java.util.Map. Om en prob är riktad mot paketet java.util, klassnamnet Map och metodnamnet size, används proben på java.util.HashMap.size() och på size-metoden för alla andra klasser som implementerar gränssnittet Map.
  • Med mönstermatchningen hanteras inte ärvda förhållanden. Om klassen Derived utökar klassen Base och en prob körs mot Base.run() kommer proben inte att automatiskt användas på Derived.run().
  • Om paketmönstret i en målspecifikation är en enda punkt (".")representerar det globala, ej namngivna Java-paketet. Det här gör att du explicit kan köra prober mot klasser i det globala paketet.
  • Callsite-prober matchar målmönster och regler mot paket, klass, namn och signatur för en anropad metod. Matchningen görs mot den anropade metoden som var känd vid kompileringsögonblicket, alltså mot den statiskt kända klassen och metodnamnet, inte de faktiska metoder som anropas på grund av arv och virtuella funktioner. Om anropet görs via en gränssnittsreferens måste gränssnittsnamnet matcha.
Exempel:

Du anger ett mål genom att markera Mål i trädfönstret på sidan Prober och klicka på Lägg till, och sedan på Redigera i redigeringsfönstret.

I det här exemplet används proben endast på de metoder vars namn börjar med Get i de klasser vars namn slutar med Proxy i paketet com.example. Målposter av typerna "include" och "exclude": målposten "exclude" använder asterisker som jokertecken för att utesluta allt, målposten "include" anger de exakta metoder som proben ska köras mot. Alla övriga klasser och metoder utesluts från instrumentationen.