Btrace 拦截构造函数,同名函数

拦截方法:

1、普通方法  @OnMethod(clazz="", method="")

2、构造函数@OnMethod(claszz="", method="<init>")

3、拦截同名函数,用参数区分

一、拦截构造函数

1、创建接口

    @RequestMapping("/constructor")
public User constructor(User user){
return user;
}

  

2、测试接口

http://127.0.0.1:8080/monitor_tuning/ch4/constructor?id=1&name=nick

Btrace 拦截构造函数,同名函数

3、查看进程

Btrace 拦截构造函数,同名函数

4、创建btrace脚本,运行btrace脚本

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.AnyType;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; /**
* 拦截构造函数.
*/
@BTrace
public class PrintConstructor { /*要拦截哪个类,<init>w为构造函数,*/
@OnMethod(
clazz = "com.example.monitor_tuning.chapter2.User",
method="<init>"
)
/*ProbeClassName 方法类名; ProbeMethodName 方法名 ; AnyType[] 构造函数参数*/
public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args)
{
BTraceUtils.printArray(args);
BTraceUtils.println(pcn + "," + pmn);
BTraceUtils.println();
}
}

  运行btrace脚本

Btrace 拦截构造函数,同名函数

显示结果

Btrace 拦截构造函数,同名函数

二、拦截同名函数

1、创建两个同名的方法

    @RequestMapping("/same1")
public String same(@RequestParam("name")String name){
return "hello," + name;
} @RequestMapping("/same2")
public String same(@RequestParam("id")int id, @RequestParam("name")String name){
return "hello," + name + " id: " + id;
}

  

2、创建btrace脚本

通过参数个数,和顺序进行匹配。

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; /**
* 监控同名方法
*/ @BTrace
public class PrintSame { @OnMethod(
clazz = "com.example.monitor_tuning.chapter4.Ch4Controller",
method="same"
) public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, int id, String name)
{
BTraceUtils.println(pcn + "," + pmn + "," + name + "," + id);
BTraceUtils.println();
} }

  

3、运行btrace脚本

Btrace 拦截构造函数,同名函数

调用接口

http://127.0.0.1:8080/monitor_tuning/ch4/same2?name=nick&id=2

最终显示结果见上图

上一篇:新闻网站开发-手机端-基于Wordpress


下一篇:【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现