首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用btrace探针静态法?

如何使用btrace探针静态法?
EN

Stack Overflow用户
提问于 2014-07-23 05:16:38
回答 2查看 692关注 0票数 0

我需要探索一种静态方法。但是无法探测到方法调用。有人能提供帮助吗?

我的java代码:

代码语言:javascript
复制
// CaseObject.java
package test;

public class CaseObject{

    private static int sleepTotalTime=0;

    public boolean execute(int sleepTime) throws Exception{
        System.out.println("sleep: "+sleepTime);
        sleepTotalTime+=sleepTime;
        Thread.sleep(sleepTime);
        return true;
    }

    public static boolean execute2(int sleepTime) throws Exception{
        System.out.println("sleep: "+sleepTime);
        sleepTotalTime+=sleepTime;
        Thread.sleep(sleepTime);
        return true;
    }
}

// Case2.java
package test;

import java.util.Random;

public class Case2 {

    public static void main(String[] args) throws Exception {
        Random random = new Random();
        boolean result = true;
        while (result) {
            result = CaseObject.execute2(random.nextInt(1000));
            Thread.sleep(1000);
        }
    }

}

我的

代码语言:javascript
复制
// TraceMethodArgsAndReturn2.java
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;

@BTrace public class TraceMethodArgsAndReturn2{
    @OnMethod(
            clazz="test.CaseObject",
            method="execute2",
            location=@Location(Kind.RETURN)
    )
    public static void traceExecute(@Self test.CaseObject instance,int sleepTime,@Return boolean result){
        println("call CaseObject.execute2");
        println(strcat("sleepTime is:",str(sleepTime)));
        println(strcat("sleepTotalTime is:",str(get(field("test.CaseObject","sleepTotalTime"),instance))));
        println(strcat("return value is:",str(result)));
    }
}

我运行它的方式如下:./btrace/bin/btrace -cp /tmp/a/目标/classes/ 8477 ./btrace/TraceMethodArgsAndRetur2.java

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-23 05:55:27

好吧,我发现了问题.@Self不应使用。

票数 1
EN

Stack Overflow用户

发布于 2016-09-13 10:42:43

通常,您可以探测这样的静态方法:

代码语言:javascript
复制
@OnMethod(clazz = "java.lang.Integer", method = "valueOf")
public static void onValueOf(int name) {
  println("***********************");
  jstack();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24902387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档