码迷,mamicode.com
首页 > 其他好文 > 详细

04 使用 BTrace 进行拦截调试

时间:2020-05-07 01:03:43      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:正则   情况   visualvm   cto   指定   compile   ext   反射   mac   

 BTrace

BTrace 可以动态地向目标应用程序的字节码注入追踪代码,使用的技术有 JavaCompilerApi, JVMTI, Agent, Instrumentation+ASM

使用方法:JVisualVM中添加 BTrace 插件

方法二:btrace <pid> <trace_script>

monitor_tuning中新增包org.alanhou.monitor_tuning.chapter4

安装BTrace 要记得配置环境变量,以 Windows 为例

BTRACE_HOME=E:\tool\btrace-2.0.1-bin
PTAH 加上 %BTRACE_HOME%\bin

 

安装BTrace 要记得配置环境变量,以 Mac 为例

pom.xml 中添加 btrace-agent, btrace-boot, btrace-client的依赖

访问:http://localhost:12345/ch4/arg1?name=Java

常见问题:Please set JAVA_HOME before running this script

# vi ~/.bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
# source ~/.bash_profile

拦截方法

普通方法:@OnMethod( clazz=“”, method=“”),如上例(PrintArgSimple.java)

构造函数:@OnMethod( clazz=“”, method=“<init> “)(PrintContructor.java)

拦截同名函数:用参数区分(PrintSame.java)

如下例中虽然方法名相同,但分别有一个和两个参数

拦截时机

Kind.ENTRY: 入口,默认值(上述例子均为这种情况)

Kind.RETURN: 返回(PrintReturn.java)

Kind.THROW: 异常(PrintOnThrow.java)

Kind.Line: 行(PrintLine.java)

拦截 this、入参、返回值

this:@self

入参:可以用 AnyType,也可以用真实类型,同名的用真实的

返回:@Return

获取对象的值

简单类型:直接获取

复杂类型:反射,类名+属性名(PrintArgComplex.java)

拦截函数中还可以使用正则表达式,如method=”/.*/”匹配指定类下的所有方法(PrintRegex.java)

打印环境变量(PrintJinfo.java)

 

04 使用 BTrace 进行拦截调试

标签:正则   情况   visualvm   cto   指定   compile   ext   反射   mac   

原文地址:https://www.cnblogs.com/hg-super-man/p/12840049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!