Kind.ENTRY 入口,默认值

Kind.RETURN:  返回

Kind.THROW: 异常

Kind.Line: 行

一、返回时拦截

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.AnyType;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; @BTrace
public class PrintReturn { @OnMethod(
clazz = "com.example.monitor_tuning.chapter4.Ch4Controller",
method="arg1",
location = @Location(Kind.RETURN)
)
public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, @Return AnyType result)
{
BTraceUtils.println(pcn + "," + pmn + "," + result);
BTraceUtils.println();
}
}

  

2、运行和返回结果

1)、运行

2)、调用接口:

http://127.0.0.1:8080/monitor_tuning/ch4/arg1?name=nick

3)返回结果见上图

二、异常时拦截

1、创建异常代码

2、创建异常脚本

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; /**
* 拦截异常
*/
@BTrace
public class PrintOnThrow { @TLS
static Throwable currentException; @OnMethod(
clazz = "java.lang.Throwable",
method="<init>"
)
//拦截 new Throwable
public static void onthrow(@Self Throwable self)
{
currentException = self;
} @OnMethod(
clazz = "java.lang.Throwable",
method="<init>"
)
//拦截 new Throwable(String msg)
public static void onthrow1(@Self Throwable self, String s)
{
currentException = self;
} @OnMethod(
clazz = "java.lang.Throwable",
method="<init>"
)
//拦截 new Throwable(Throwable self, String s, Throwable cause)
public static void onthrow1(@Self Throwable self, String s, Throwable cause)
{
currentException = self;
} @OnMethod(
clazz = "java.lang.Throwable",
method="<init>"
)
//拦截 new Throwable( Throwable self, Throwable cause)
public static void onthrow2(@Self Throwable self, Throwable cause)
{
currentException = self;
} @OnMethod(
clazz = "java.lang.Throwable",
method="<init>",
location = @Location(Kind.RETURN)
)
public static void onthrowreturn()
{
if(currentException != null){
BTraceUtils.Threads.jstack(currentException); //打印异常堆栈
BTraceUtils.println("==============");
currentException = null;
}
} }

  

3、运行btrace脚本

调用接口

http://127.0.0.1:8080/monitor_tuning/ch4/exception

显示结果

三、打印行号

1、打印36行是否执行

2、创建btrace脚本

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; /**
* 打印行号,查看指定行号是否执行到
*/
@BTrace
public class PrintLine { @OnMethod(
clazz = "com.example.monitor_tuning.chapter4.Ch4Controller",
location = @Location(value = Kind.LINE, line = 36)
) public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, int line)
{
BTraceUtils.println(pcn + "," + pmn + ", " + line);
BTraceUtils.println();
}
}

  

  

3、执行

调用接口

http://localhost:8080/monitor_tuning/ch4/exception

显示结果

4、打印所有执行的行号

1)接口对应的行号

2、修改btrace脚本 line为-1

显示结果

说明 36, 37, 39, 42行被执行了。38行没有被执行到。

Btrace 拦截时机的更多相关文章

  1. Btrace 拦截构造函数,同名函数

    拦截方法: 1.普通方法  @OnMethod(clazz="", method="") 2.构造函数@OnMethod(claszz="" ...

  2. Btrace入门到熟练小工完全指南

    BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的. BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息.而不需要不断地修改代码, ...

  3. BTrace : Java 线上问题排查神器

    BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务.写好脚本,直接用命 ...

  4. BTrace 问题辅助排查工具使用手册

    BTrace是调试神器,可以通过自己编写的脚本,获取应用的一切调用信息.而不需要重启应用! Btrace 项目源码信息(你行你上~) 项目地址:http://github.com/btraceio/b ...

  5. BTrace学习总结

    一.简介: 在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉.一般情况下是通过修改程序,添加打印日志:然后重新发布程序来完成.然而,这不仅麻烦,而且带来很多不可控的因素.有没有一种方 ...

  6. Btrace使用入门

    1.什么是BTrace BTrace是sun公司推出的一款Java 动态.安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数.返回值.全局变量和堆 ...

  7. 认识一下java神器Btrace

    转载: http://calvin1978.blogcn.com/articles/btrace1.html BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都 ...

  8. JVM调优(三)——基于Btrace的监控调试

    JVM调优(三)--基于Btrace的监控调试 简介 Btrace可以动态地向目标应用程序的字节码注入追踪代码 用到的技术: JavaComplierApi.JVMTI.Agent.Instrumen ...

  9. 基于BTrace监控调试Java代码

    BTrace是Java的一个动态代码追踪工具,通过编写btrace脚本,它可以动态的向目标应用程序的字节码注入追踪代码,通过修改字节码的方式,达到监控调试和定位问题的目的,是解决线上问题的利器. BT ...

随机推荐

  1. firefox 屏蔽Backspace按键的后退功能

    直接上图

  2. 关于MySQL什么时候使用索引问题以及什么情况下应不建或少建索引

    一,什么情况下使用索引1. 表的主关键字 自动建立唯一索引 2. 表的字段唯一约束 ORACLE利用索引来保证数据的完整性 3. 直接条件查询的字段 在SQL中用于条件约束的字段 如zl_yhjbqk ...

  3. elasticsearch(6) 映射和分析

    类似关系型数据库中每个字段都有对应的数据类型,例如nvarchar.int.date等等,elasticsearch也会将文档中的字段映射成对应的数据类型,这一映射可以使ES自动生成的,也是可以由我们 ...

  4. Python参数笔记

    Python参数 1. 普通参数 必须要传入和定义时个数相同的参数 def miao(acfun, bilibili): print(acfun, bilibili) miao(11, 22) > ...

  5. python基础16_闭包_装饰器

    不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield  generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...

  6. jquery评分插件jquery.raty.js

    1.参考链接 官方地址. 教程一 教程二 2.案例1 引入文件: <!-- 评分插件 --> <script type="text/javascript" src ...

  7. python编程从入门到实践 alien invasion 项目源码

    现在上传一个 python编程从入门到实践 alien invasion 项目源码 以供大家学习参考 跟官方版本可能不太一样,因为是自己写的 也算是给新手一个参考 我用的环境是pycharm 可能需要 ...

  8. jstl,el表达式

    在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...

  9. sql server 字符串根据指定分隔符进行分组

    SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO --功能:分拆字符串 --参数:@String:要分拆的字符串:@Delimiter:分割符号 --返回值: ...

  10. 41.找出所有和为S的连续正数序列

    小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和, 他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数). 没多久,他就得到 ...