标签:一个 而在 流程 自定义输出 dal sans mac nta font
BTrace是基于java的动态追踪技术来实现的。java程序的开发流程是写java代码,把它编译为class文件,然后在JVM中加载class运行。若此时想要在不停止应用的情况下对class进行修改来添加追踪内容,如在某个方法(method)中添加输出信息,主要是两件事情:
JVM中的class,添加自定义输出第一步,修改,由于JVM运行的都是class文件,是不是可以直接修改字节码class文件就行了(当然,字节码文件的可读性远远没有Java代码高),但是已经有相应的框架可以做这件事,就是ASM,利用这框架,可以直接编辑字节码的框架,它也提供接口可以让我们方便地操作字节码文件,进行注入修改类的方法,动态创造一个新的类等等。Spring就是使用这种技术来实现动态代理的。
第二步,替换,如果对它进行替换,则需要用到java提供的java.lang.instrument.Instrumentation,它有两个接口redefineClasses和retransformClasses,redefineClasses是自己提供字节码文件替换掉已存在的class文件,retransformClasses是在已存在的字节码文件上修改后再替换。不过需要注意的是instrument的使用有限制的(不能添加、修改、删除已经有字段和方法,不能改变方法签名,改变继承属性等)。
标签:一个 而在 流程 自定义输出 dal sans mac nta font
原文地址:https://www.cnblogs.com/doit8791/p/12065743.html