0

正如我在标题中提到的,我尝试使用 btrace 来跟踪一个 restful api 的执行并得到这个错误:"Handler dispatch failed; nested exception is java.lang.NoSuchFieldError: runtime"当我调用 restful api 时。在我开始 btrace 进程之前,这个 restful api 运行良好,一旦我启动btrace 过程,这个宁静的 api 每次调用这个 api 时都会抛出错误。

一些信息:

sping version:4.3.9.RELEASE
btrace version:1.3.12-SNAPSHOT
tomcat version:8.5.34

Restful API(java代码):

    @Controller
@RequestMapping("/user")
public class UserInfoController {

    @RequestMapping(value = "/greetting/{name}", method = RequestMethod.GET)
    @ResponseBody
    public WebResponse<String> greet(@PathVariable(value = "name") String name) {
        int a = 1;
        return WebResponseUtil.onSuccess("hello " + name);
    }
}

btrace 测试类代码:

    @BTrace
public class BtraceTest {

//    //获取耗时与方法名
//    @O`enter code here`nMethod(clazz = "com.zrr.controller.UserInfoController", method = "greet", location = @Location(Kind.RETURN))
//    public static void getFuncRunTime(@ProbeMethodName String pmn, @Duration long duration) {
//        println("接口 " + pmn + strcat("的执行时间(ms)为: ", str(duration / 1000000))); //单位是纳秒,要转为毫秒
//    }


    @OnMethod(
            clazz = "com.meituan.zrr.controller.UserInfoController",
            method = "greet",
            location = @Location(Kind.ENTRY)
    )
    public static void getFuncEntry(@ProbeClassName String pcn, @ProbeMethodName String pmn, String name) {
        println("类名: " + pcn);
        println("方法名: " + pmn);

        BTraceUtils.print("入参userName为: ");
        BTraceUtils.printFields(name);
    }
}

我想知道这是否与 btrace 版本有关?希望有人能救我,谢谢!

4

1 回答 1

0

出现问题是因为我将 btrace java 文件和测试控制器 java 文件放在同一个项目中。在我将它们放在两个不同的项目中并从测试项目中删除 btrace 依赖项后,问题就解决了。

于 2019-04-09T08:15:39.053 回答