探针目标指定

目标指定指示将要应用探针的类和方法。

目标指定是可选的。当未指定目标时,将把探针应用于由检测引擎处理的所有类。

目标指定允许您创建过滤规则,以便根据与包、类、方法名以及方法的特征符相匹配的模式来确定检测操作是包括还是排除方法。这些模式可以包含通配符,其中“*”代表零个或多个字符。

如果目标的通配符模式与方法的包、类、名称和特征符相匹配,则类型属性将确定是检测(include)还是不检测(exclude)该方法。如果这些模式与方法的包、类、名称和特征符不匹配,则缺省情况下将检测该方法。

目标包括下列属性:
属性 描述
type 必需。类型属性确定是否将探针应用于目标方法。指定 include 以将探针应用于与通配符模式相匹配的类和方法,指定 exclude 则排除这些类和方法。
package 可选。指定要与类名的包部分匹配的通配符模式。例如:java.util*java.util 包和它的子包中的每个类匹配。如果未指定此属性,则缺省值为 *
className 可选。指定要与类名匹配的通配符模式。如果未指定此属性,则缺省值为 *
method 可选。指定要与方法名匹配的通配符模式。如果未指定此属性,则缺省值为 *
signature 可选。指定要与方法的特征符匹配的通配符模式。(特征符是表示方法的参数和返回类型的字符串)。使用方法特征符的 Java 内部格式。例如:(Ljava/lang/Object;)D 是将 Object 作为参数并返回 double 类型的方法的特征符。此通配符模式可用来区分重载方法。如果未指定此属性,则缺省值为 *

注意:

  • 探针可以具有多个包含连续的确定目标规则的目标指定。要将探针仅应用于某些方法,首先指定您要包括的方法,然后添加最终的目标指定 package=* className=* method=* signature=* type=exclude
  • 还将针对类实现的任何接口的包和类名来检查在您指定的包和类名。例如,java.util.HashMap 实现接口 java.util.Map。如果探针将包 java.util、类名 Map 和方法名 size 作为目标,则该探针将应用于 java.util.HashMap.size(),还会应用于实现 Map 接口的任何其他类的 size 方法。
  • 模式匹配不考虑继承关系。如果 Derived 类继承 Base 类,并且探针将 Base.run() 作为目标,则该探针不会自动应用于 Derived.run()
  • 如果目标指定中的包模式是一个句点符号(“.”),则它表示未命名的全局 Java 包。这允许您显式地将全局包中的类作为目标。
  • 调用位置探针将目标模式和规则与已调用方法的包、类、名称和特征符进行匹配。匹配操作是针对编译时已知的被调用方法来完成的;即,针对静态已知的类和方法名,而不是由于继承和虚函数将调用的实际方法。如果调用是通过接口引用完成的,则接口名称必须匹配。
示例:

要指定目标,在“探针”页的树窗格中选择目标,并在编辑窗格中单击添加,然后单击编辑

此示例仅将探针应用于包 com.example 中名称以 Proxy 结束的类中名称以 Get 开始的方法。类型为包括和排除的目标条目;排除目标条目使用星号通配符来排除所有内容;包括条目指定要作为目标的确切方法。将从检测中排除所有其他类和方法。