zoukankan      html  css  js  c++  java
  • 04 使用 BTrace 进行拦截调试

     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:	ooltrace-2.0.1-bin
    PTAH 加上 %BTRACE_HOME%in

    安装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)

     
  • 相关阅读:
    【Java】java运行jar时,报 java.lang.UnsupportedClassVersionError
    【kafka】kafka.admin.AdminOperationException: replication factor: 1 larger than available brokers: 0
    【DB2】关闭表的日志功能
    python网络爬虫技术图谱
    对于网络通信的理解(图)
    对项目开发流程的思考和小结
    django框架--cookie/session
    django框架--中间件系统
    django框架--底层架构
    django框架--视图系统
  • 原文地址:https://www.cnblogs.com/hg-super-man/p/12840049.html
Copyright © 2011-2022 走看看