BTrace系列之二:简单示例

 

BTrace工具使用简介

“Hello World”

案例描述

使用test方法接收一个int类型参数,根据参数放入map中两个字符串。

现代码中没有打印出任何的日志,导致产生的int值无法确定,以及执行路径无法确定,这个时候可以使用BTrace来跟踪、分析程序路径。

Java代码
  1. import java.util.HashMap;   
  2. import java.util.Map;   
  3. import java.util.Random;   
  4.   
  5. public class TestHello   
  6. {   
  7.   
  8.     public static void main(String[] args) throws InterruptedException   
  9.     {   
  10.         Thread.sleep(2000 * 10);   
  11.         TestHello th = new TestHello();   
  12.   
  13.         Random random = new Random(47);   
  14.         th.test(random.nextInt(9) + 1);   
  15.     }   
  16.   
  17.     private Map<String, String> model = new HashMap<String, String>();   
  18.   
  19.     public boolean test(int age)   
  20.     {   
  21.         String variable1 = "默认提示信息:你输入的参数是:" + age;   
  22.         String variable2 = "欢迎观临网上乐园";   
  23.   
  24.         model.put("variable1", variable1);   
  25.         model.put("variable2", variable2);   
  26.   
  27.         if (age >= 1 && age <= 5)   
  28.         {   
  29.             variable1 = "你的输入参数介于1和5之间";   
  30.             variable2 = "欢迎小朋友玩益智类游戏";   
  31.   
  32.             model.put("variable1", variable1);   
  33.             model.put("variable2", variable2);   
  34.   
  35.             return true;   
  36.         }   
  37.         else if (age > 5 && age <= 10)   
  38.         {   
  39.             variable1 = "你的输入参数介于5和10之间";   
  40.             variable2 = "欢迎小朋友进入英语游乐场";   
  41.   
  42.             model.put("variable1", variable1);   
  43.             model.put("variable2", variable2);   
  44.   
  45.             return false;   
  46.         }   
  47.         else  
  48.         {   
  49.             return true;   
  50.         }   
  51.     }   
  52.   
  53. }  
import java.util.HashMap;import java.util.Map;import java.util.Random;public class TestHello{    public static void main(String[] args) throws InterruptedException    {        Thread.sleep(2000 * 10);        TestHello th = new TestHello();        Random random = new Random(47);        th.test(random.nextInt(9) + 1);    }    private Map<String, String> model = new HashMap<String, String>();    public boolean test(int age)    {        String variable1 = "默认提示信息:你输入的参数是:" + age;        String variable2 = "欢迎观临网上乐园";        model.put("variable1", variable1);        model.put("variable2", variable2);        if (age >= 1 && age <= 5)        {            variable1 = "你的输入参数介于1和5之间";            variable2 = "欢迎小朋友玩益智类游戏";            model.put("variable1", variable1);            model.put("variable2", variable2);            return true;        }        else if (age > 5 && age <= 10)        {            variable1 = "你的输入参数介于5和10之间";            variable2 = "欢迎小朋友进入英语游乐场";            model.put("variable1", variable1);            model.put("variable2", variable2);            return false;        }        else        {            return true;        }    }}

 

 

BTrace脚本:

Java代码
  1. import com.sun.btrace.annotations.*;   
  2. import static com.sun.btrace.BTraceUtils.*;   
  3. import java.util.HashMap;   
  4.   
  5. @BTrace public class BTraceField {   
  6.     @OnMethod(clazz="java.util.HashMap", method="put")   
  7.     public static void m(@Self HashMap map, Object Key, Object value) { // all calls to the methods with signature "()"   
  8.                 println("====================");   
  9.                 print(Key);   
  10.                 print(":");   
  11.                 println(value);   
  12.     }   
  13.        
  14.     @OnMethod(clazz="TestHello", method="test")   
  15.     public static void d(@Self Object obj, int age){   
  16.             print("test method is called, input age=");   
  17.             println(age);          
  18.     }   
  19.        
  20. }  
import com.sun.btrace.annotations.*;import static com.sun.btrace.BTraceUtils.*;import java.util.HashMap;@BTrace public class BTraceField {    @OnMethod(clazz="java.util.HashMap", method="put")    public static void m(@Self HashMap map, Object Key, Object value) { // all calls to the methods with signature "()"    			println("====================");    			print(Key);    			print(":");    			println(value);    }        @OnMethod(clazz="TestHello", method="test")    public static void d(@Self Object obj, int age){	        print("test method is called, input age=");	        println(age);    	    }    }

 

首先运行TestHello

使用jps查找TestHello的PID,输入btrace <pid> BTraceField.java

 

输出:

test method is called, input age=3

====================

variable1:默认提示信息:你输入的参数是:3

====================

variable2:欢迎观临网上乐园

====================

variable1:你的输入参数介于1和5之间

====================

variable2:欢迎小朋友玩益智类游戏

其他相关博文
BTrace系列之一:简介

BTrace系列之二:简单示例

BTrace系列之三:实际案例

BTrace系列之四:破解

你可能感兴趣的:(String,object,HashMap,Random,input,import)