btrace exercise

1. 方法被調用時打印調用堆棧

    @OnMethod(clazz = "com.test.test.btrace.AppObj", method = "execute")
    public static void traceExecute() {
        println("call AppObj called");
        jstack();
    }

2. 打印這個類哪些行被調用

    @OnMethod(clazz = "com.test.test.btrace.AppObj", location = @Location(value = Kind.LINE, line = -1))
    public static void line(@ProbeClassName String pcn, @ProbeMethodName String pmn, int line) {
        print(Strings.strcat(pcn, "."));
        println(Strings.strcat(pmn, ":"));
        println(line);
    }

3. 打印方法花費時間

    @TLS
    static long beginTime1;

    @OnMethod(clazz = "com.test.test.btrace.AppObj", method = "execute")
    public static void traceBegin1() {
        beginTime1 = timeMillis();
    }

    @OnMethod(clazz = "com.test.test.btrace.AppObj", method = "execute", location = @Location(Kind.RETURN))
    public static void traceExecute1() {
        println(strcat("time:", str(timeMillis() - beginTime1)));
    }

4. 打印方法參數
    @OnMethod(clazz = "com.test.test.btrace.AppObj", method = "execute")
    public static void traceExecute2(@Self Object instance, AnyType[] args) {
        printArray(args);
    }

5. 打印返回值

    @OnMethod(clazz = "com.test.test.btrace.AppObj", method = "execute", location = @Location(Kind.RETURN))
    public static void traceExecute(@Self Object instance, @Return boolean result) {
        println("call AppObj called");
        println(strcat("result=", str(result)));
    }

6. 打印對象屬性值

    @OnMethod(clazz = "com.test.test.btrace.AppObj", method = "execute")
    public static void traceExecute(@Self AppObj self) {
        println(get(field("com.test.test.btrace.AppObj", "sum"), self));
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章