Skip to content

Hook规则的类型

插桩一个函数

  • ImportPath: 包含要插桩的函数的包的导入路径。例如 net/http
  • Dependencies: 应用此规则必须存在的附加依赖项列表。所有依赖项必须存在于项目中。例如 "k8s.io/apimachinery"
  • Function: 要插桩的函数的名称,可以是正则表达式以匹配多个函数。例如 .* 匹配包中的所有函数,.*ServeHTTP 匹配名称以 ServeHTTP 结尾的所有函数,依此类推。
  • ReceiverType: 要插桩的函数的接收器类型,也可以是正则表达式。例如 .* 匹配包中的所有接收器类型,即使函数没有接收器,.* 仍然匹配它。.*http.Request 匹配接收器类型为 http.Request 的所有函数,\\*Client 匹配接收器类型为 *Client 的所有函数,依此类推。
  • OnEnter: 当被插桩的函数被调用时要调用的函数的名称。例如 clientOnEnter
  • OnExit: 当被插桩的函数返回时要调用的函数的名称。例如 clientOnExit
  • Order: 探针代码在被插桩的函数中的顺序。例如 0, 1, 2
  • Path: 包含探针代码的目录的路径。路径可以是go模块url或本地文件系统路径,例如 github.com/foo/bar/path/to/probe/code
  • Version: 包含要插桩的函数的包的版本。例如 [1.0.0,1.1.0),版本范围是 [1.0.0,1.1.0),这意味着版本大于或等于 1.0.0 且小于 1.1.0

![TIP] 您可以同时使用 FunctionReceiverType 的 ".*" 来匹配特定包中的所有函数和所有接收器类型。

在编译包期间添加一个新文件

  • ImportPath: 包含要插桩的函数的包的导入路径。
  • FileName : 要添加的文件的名称。
  • Path: 包含探针代码的目录的路径。
  • Replace: 如果文件已存在,则替换它,默认为 false

向结构体添加一个新字段

  • ImportPath: 包含要插桩的结构体的包的导入路径。
  • StructType: 要插桩的结构体的名称。
  • FieldName: 要添加的字段的名称。
  • FieldType: 要添加的字段的类型。