`
wbj0110
  • 浏览: 1603936 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多

BTrace 是一款利用hotSpot虚拟机可以动态替换class的特点而完成的,可以对online的程序动态的改变类的行为(一般为加些打印日志),进而进行线上调试的一个工具。

主要步骤如下(本次测试只针对BTrace和测试的程序在同一台机器上,remote的还待实验):

1、下载地址:http://kenai.com/projects/btrace/downloads/download/releases/

2、解压到linux相应的目录下。

3、编写普通运行的程序如下:

复制代码
package com.ddc.mem;

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);
           if(sleepTime%2==0)
               return true;
           else 
               return false;
       }
     
    }
复制代码

Main函数运行:

复制代码
package com.ddc.mem;

import java.util.Random;

public class CaseObjectMain {

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

4、将以上两个类编译并运行 。

5、编写BTrace 文件,按照java规范,java文件名称为TracingScript.java

复制代码
/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace
public class TracingScript {
    /* put your code here */
/*指明要查看的方法,类*/
  @OnMethod(
     clazz="com.ddc.mem.CaseObject",
     method="execute",
     location=@Location(Kind.RETURN)
  )
/*主要两个参数是对象自己的引用 和 返回值,其它参数都是方法调用时传入的参数*/
   public static void traceExecute(@Self com.ddc.mem.CaseObject object,int sleepTime, @Return boolean result){
      println("调用堆栈!!");
       println(strcat("返回结果是:",str(result)));
      jstack();
      println(strcat("时间是:",str(sleepTime)));
   }

}
复制代码

6、对于btrace文件夹加运行时路径(java_home 和 classpath)

修改{btrace_home}/bin/btrace 文件

复制代码
#! /bin/sh

#需要设置jdk的路径,因为需要动态编译,所以需要设置这个路径
JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22
#因为需要动态编译,所以需要设置原类库的classpath,主要是要编译BTRACE文件,它里面肯定有依赖原类
CLASS_PATH=/data/testxiao/
#BTRACE_HOME路径,编译以及运行时都需要BTRACE自己的jar包
BTRACE_HOME=/data/btrace
if [ -z "$BTRACE_HOME" -o ! -d "$BTRACE_HOME" ] ; then
  # resolve links - $0 could be a link to btrace's home
  PRG="$0"
  progname=`basename "$0"`
  BTRACE_HOME=`dirname "$PRG"`/..
  BTRACE_HOME=`cd "$BTRACE_HOME" && pwd`
fi

if [ -f "${BTRACE_HOME}/build/btrace-client.jar" ] ; then
    if [ "${JAVA_HOME}" != "" ]; then
       case "`uname`" in
          Darwin*)
              # In Mac OS X, tools.jar is classes.jar and is kept in a 
              # different location. Check if we can locate classes.jar
              # based on ${JAVA_VERSION}
              TOOLS_JAR="/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Classes/classes.jar"

              # if we can't find, try relative path from ${JAVA_HOME}. Usually,
              # /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
              # is JAVA_HOME. (or whatever version beyond 1.6.0!)
              if [ ! -f ${TOOLS_JAR} ] ; then
                  TOOLS_JAR="${JAVA_HOME}/../Classes/classes.jar" 
              fi

              # If we still can't find, tell the user to set JAVA_VERSION.
              # This way, we can avoid zip file errors from the agent side
              # and "connection refused" message from client.
              if [ ! -f ${TOOLS_JAR} ] ; then
                  echo "Please set JAVA_VERSION to the target java version"
                  exit 1
              fi
          ;;
          *)
              TOOLS_JAR="${JAVA_HOME}/lib/tools.jar"
          ;;
       esac
       ${JAVA_HOME}/bin/java -Dcom.sun.btrace.probeDescPath=. -Dcom.sun.btrace.dumpClasses=false -Dcom.sun.btrace.debug=false -Dcom.sun.btrace.unsafe=false -cp ${BTRACE_HOME}/build/btrace-client.jar:${TOOLS_JAR}:/usr/share/lib/java/dtrace.jar:${CLASS_PATH} com.sun.btrace.client.Main $*
    else
       echo "Please set JAVA_HOME before running this script"
       exit 1
    fi
else
    echo "Please set BTRACE_HOME before running this script"
    exit 1
fi
复制代码

 

7、jps   CaseObjectMain进程的pid,假设pid为1478 ,刚才的btrace  为TracingScript.java

    则运行命令为 :bin/btrace   1478 TracingScript.java

8、一切ok  

输出如下:

调用堆栈!!
返回结果是:false
com.ddc.mem.CaseObject.execute(CaseObject.java:14)
com.ddc.mem.CaseObjectMain.main(CaseObjectMain.java:11)
时间是:483
调用堆栈!!
返回结果是:true
com.ddc.mem.CaseObject.execute(CaseObject.java:12)
com.ddc.mem.CaseObjectMain.main(CaseObjectMain.java:11)
时间是:998
调用堆栈!!
返回结果是:false
com.ddc.mem.CaseObject.execute(CaseObject.java:14)
com.ddc.mem.CaseObjectMain.main(CaseObjectMain.java:11)
时间是:611
调用堆栈!!
返回结果是:true
com.ddc.mem.CaseObject.execute(CaseObject.java:12)
com.ddc.mem.CaseObjectMain.main(CaseObjectMain.java:11)
时间是:524

分享到:
评论

相关推荐

    MQTT调试工具:mqttfx-1.7.1-windows-x64

    MQTT调试工具:mqttfx-1.7.1-windows-x64

    vue开发调试工具--vuejs-deltools

    vue开发调试工具--vuejs-deltools

    ILITEK 触摸屏 ITS调试工具中文 Windows-Studio-ITS-User-Guide(CHT)-v1.0.3.5

    ### ILITEK 触摸屏 ITS调试工具中文版——Windows-Studio-ITS-User-Guide(CHT)-v1.0.3.5 #### 一、概述 ILITEK触摸屏ITS调试工具是一款专为ILITEK触摸屏设计的专业调试与优化软件。此工具能够帮助用户实现对触摸屏...

    btrace-bin.zip

    总之,BTrace是一个强大的Java线上调试和分析工具,它的出现使得开发者能够更加灵活、高效地诊断和优化在线运行的Java应用程序。通过深入理解和熟练运用BTrace,开发者可以更好地维护和优化他们的系统,提升服务质量...

    WEB调试工具---Firebug.txt

    WEB调试工具---Firebug.txt 前端必备技能,助你快速掌握

    NB-IoT串口调试工具

    在使用NB-IoT串口调试工具时,你需要了解以下关键知识点: 1. **串口通信**:串口通信是一种常见的硬件接口,允许计算机或其他设备之间进行数据交换。在NB-IoT应用中,串口常用于将控制指令和数据发送到NB-IoT模块...

    USR-TCP232 是串口调试工具及网络TCP调试工具二合一

    用户可以使用软件来设置设备的网络连接信息,以便设备能够正确连接到局域网或互联网。 测试通信功能: USR-TCP232 设备用于实现串口设备与网络的数据传输。软件允许用户在串口和网络之间进行数据传输测试,确保通信...

    发条JS调试工具JS-ED_1.9

    **发条JS调试工具JS-ED 1.9:深入理解与应用** 发条JS调试工具JS-ED 1.9是一款专为JavaScript开发者设计的强大调试工具,它可以帮助程序员高效地定位并解决代码中的错误,优化性能,以及提升开发效率。在本文中,...

    E-Tool 多功能开发调试工具

    E-Tool, A Tool Easy To Use , 用于嵌入式软件工程师、创客等的开发工作。 功能: 串口相关工具 串口助手 串口文本传输 ISP下载工具 串口绘图 串口摄像头 网络相关工具 网络调试助手

    网络调试助手USR-TCP232-Test.zip

    USR-TCP232-Test是一款专为网络设备调试设计的工具,主要针对USR IOT公司的TCP/IP到串口转换器进行测试和配置。这款工具能够帮助用户在没有物理连接的情况下,通过网络对设备进行远程调试,极大地提升了工作效率。...

    x86.rar vs2015远程调试端工具-----------------------------

    vs2015远程调试端,用于远程调试使用的工具,远程调试必备。

    949716583534019DR-API调试工具_v1.0.zip

    本文将深入探讨该工具的核心功能、应用场景以及使用方法,帮助开发者更好地理解和利用这一强大的调试资源。 首先,我们来了解DR-API的基本概念。DR通常涉及到数据备份、恢复和灾难应对策略,确保在系统故障或灾难...

    btrace_extend-master

    2. **安全性**:BTrace使用JDK的动态代理机制,确保只在安全的点插入探查代码,避免引发运行时错误或性能下降。 3. **实时性能分析**:通过BTrace,你可以实时查看方法调用的时间、对象创建频率、内存分配情况等,...

    c#多功能调试工具TCP-UDP-PING-SERIAL-NOTEPAD程序员必备

    《C#多功能调试工具:TCP-UDP-PING-SERIAL-NOTEPAD——程序员的得力助手》 在软件开发过程中,调试工具是程序员不可或缺的伙伴。本文将深入探讨一款名为“C#多功能调试工具”的实用程序,它整合了TCP、UDP、PING、...

    IEC60870-103调试工具_103调试工具_103调试软件_103_103规约_103规约

    本文将详细讲解103规约及其调试工具的相关知识点。 1. **103规约概述** IEC60870-103标准是国际电工委员会制定的电力系统自动化设备间通信协议的一部分,主要应用于电力系统的遥测、遥控和遥信功能。它支持通过...

    WAGO_IOCheck3_Setup在线调试工具.zip

    《WAGO IOCheck3 在线调试工具:提升远程IO管理效率》 在现代工业自动化领域,数据采集与控制系统的高效运行至关重要。WAGO公司作为知名的电气连接和自动化解决方案提供商,其750系列远程I/O模块凭借可靠性和灵活性...

    linux下TCPTDP调试工具 sokit-master

    在Linux下,通常使用命令行工具如`tcpdump`、`netstat`、`ss`等进行网络调试,但这些工具对于初学者或者需要快速可视化分析的场景可能不够友好。这就是`sokit-master`的作用,它提供了图形化的界面,能够帮助用户...

    vue2.0-devtools谷歌浏览器调试工具和vue3.0-devtools谷歌浏览器调试工具

    该资源包括vue2.0-devtools谷歌浏览器调试工具和vue3.0-devtools谷歌浏览器调试工具,具体安装方法参考我的博客https://blog.csdn.net/dxnn520/article/details/121088688,如还不会,可私信我。

    全新高速HID调试工具

    全新高速 HID 调试工具,程序袁USB开发利器 支持一下特性: *支持高速USB *自适应HID报告长度 *自动定时发送 *内置CRC小工具 *自定义显示

    WT-JS_DEBUG v1.4 ,本地JS调试工具。

    **调试操作**:当执行到断点处,工具会自动暂停,此时可使用步进执行、查看变量等调试功能。 **关闭调试**:完成调试后,点击“停止”按钮结束调试。 ### 四、对比其他JS调试工具 相比于浏览器内置的开发者工具,...

Global site tag (gtag.js) - Google Analytics