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] 您可以同时使用
Function和ReceiverType的 ".*" 来匹配特定包中的所有函数和所有接收器类型。
在编译包期间添加一个新文件
ImportPath: 包含要插桩的函数的包的导入路径。FileName: 要添加的文件的名称。Path: 包含探针代码的目录的路径。Replace: 如果文件已存在,则替换它,默认为false。
向结构体添加一个新字段
ImportPath: 包含要插桩的结构体的包的导入路径。StructType: 要插桩的结构体的名称。FieldName: 要添加的字段的名称。FieldType: 要添加的字段的类型。
