BTrace实战
BTrace在解决现场问题的时候非常有用。
1、概述
1.1下载
https://github.com/btraceio/btrace,最新版本是1.3.9
目前1.3.x系列最低支持JDK1.7,要想使用JDK1.6的话,可以下载http://download.csdn.net/detail/ccscu/9899450
1.2开始使用
使用命令:./btrace pid HelloWorld.java
1.3安全限制
默认不支持for循环等,可以使用-u来突破限制
1.4定义classpath
-cp
1.5输出结果到文件
推荐使用重定向而不是-o
1.6预编译脚本
./btractc HelloWorld.java
2、拦截方法定义
1、构造函数的名称是<init>
@OnMethod(clazz="java.util.Timer", method="<init>")
2、内部类的名称是在类名和内部类之间加上$
@OnMethod(clazz="org.apache.struts2.dispatcher.Dispatcher$Locator", method="getLocation")
3、拦截多个同名的函数,可以定义不同的参数列表区分
3、拦截时机
3.1Kind.ENTRY和Kind.RETURN
location=@Location(Kind.RETURN)
默认值就是Kind.ENTRY,如果使用AnyType来定义,必须使用Kind.ENTRY,否则会进入一种特殊的静默模式;
如果想获得返回值或者运行时间,必须使用Kind.RETURN。
3.2Kind.THROW
@OnMethod(clazz = "org.apache.coyote.tomcat5.CoyoteResponse", method = "getWriter", location = @Location(Kind.THROW))
4、获取this、参数和返回值
4.1定义注入
@OnMethod(clazz = "java.util.HashMap", method = "put", location = @Location(Kind.RETURN))
public static void onPutMap(@Self Object obj, String key, String value, @Return AnyType result)
参数列表要么不定义,要定义就需要完整,否则BTrace无法处理同名函数;
也可以使用AnyType或者AnyType[]来表示,这个时候必须使用Kind.ENTR,否则会进入一种特殊的静默模式,只要有一个函数打印错了,整个BTrace就什么也打印不出来。
4.2获取对象的属性值
如果是JDK的类
field("java.lang.Thread", "name");
非JDK的类
private static Field response = field(classForName("com.neusoft.unieap.techcomp.ria.action.BaseEntry", contextClassLoader()), "response") ;
Object res = get(response, obj);
这里除了get方法之外,还有getBoolean、getInt等各种基础类型的方法。
5、其他常用API
5.1获取当前线程名称
BTraceUtils.Threads.name(BTraceUtils.currentThread())
5.2获取队形的Hash code
BTraceUtils.identityHashCode(params[1])
5.3获取对象的类名称
BTraceUtils.Reflective.name(BTraceUtils.classOf(obj))
其中BTraceUtils.classOf(obj)返回类,BTraceUtils.Reflective.name返回类名称
在写这篇文章的时候借鉴了以下文章:
1、http://calvin1978.blogcn.com/articles/btrace1.html
江南白衣的文笔一流,他的BTrace的文章架构非常好:我完全模仿了他的结构
2、http://www.bo56.com/btrace示例和资料整理/
学习了如何拿到成员变量的值
3、https://www.gitbook.com/book/json-liu/btrace/details
BTrace的中文使用手册,入门必备
欢迎查看我之前的博客 http://blog.csdn.net/ccscu
BTrace实战的更多相关文章
- Java BTrace实战(1)--BTrace的入门和使用
前言: 对线上的java服务, 往往采用日志进行问题处理和分析. 倘若日志缺乏相关的信息时, 那又该如何处理? 远程调试会影响服务的正常工作, 修改代码重新部署的方案其实时性和灵活性难以保证(线上服务 ...
- 使用jvisualvm.exe 的Btrace插件介绍/使用教程
一.背景 在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数据信息,我们可以 通过改写代码,增加日志信息的打 ...
- BTrace使用总结
btracejvisualvmhotswap 一.背景 在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数 ...
- Btrace使用教程
下载 下载链接:https://github.com/btraceio/btrace/releases/tag/v1.3.9 安装及环境配置 1.下载一个压缩包 2.解压 3.配置环境变量 sudo ...
- Java应用调试利器——BTrace教程
http://www.jianshu.com/p/26f19095d396 背景 生产环境中可能出现各种问题,但是这些问题又不是程序error导致的,可能是逻辑性错误,这时候需要获取程序运行时的数据信 ...
- SSH实战 · 唯唯乐购项目(上)
前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...
- GitHub实战系列汇总篇
基础: 1.GitHub实战系列~1.环境部署+创建第一个文件 2015-12-9 http://www.cnblogs.com/dunitian/p/5034624.html 2.GitHub实战系 ...
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
随机推荐
- 关于k8s资源类型和缩写
资源类型 缩写 描述 clusters componentstatuses cs configmaps cm daemonsets ds deployments deploy ...
- kafka + spark Streaming + Tranquility Server发送数据到druid
花了很长时间尝试druid官网上说的Tranquility嵌入代码进行实时发送数据到druid,结果失败了,各种各样的原因造成了失败,现在还没有找到原因,在IDEA中可以跑起,放到线上就死活不行,有成 ...
- spring顾问包装通知
前边说到了顾问就是通知,没有实践,这里就实践一下,证明一下. 虽然可以说顾问就是通知,但是他们还是有的一定的区别的,通知是将目标类中所有的方法都进行的增强,而顾问却可以指定到特定的方法上,也就是说顾问 ...
- 使json或字典输出更美观
这里是选取的项目中部分代码,但是关于json或字典格式化输出的代码是完整的def send_post(url, data): 使用json.dumps()后数据被转成了str类型,如果还要对该数据像字 ...
- 测试误区《二》 python逻辑运算和关系运算优先级
关系运算 关系运算就是对2个对象进行比较,通过比较符判断进行比较,有6种方式. x > y 大于 x >= y 大于等于 x < y 小于 x <= y 小于等于 x = y ...
- 设置Fiddler来抓取Android接口数据
1.下载安装fiddler,安装包可自行百度.安装完成打开fiddler 2.将Fiddler设置远程访问PC 选择Fiddler->Tools->Fiddler Option 3.选择C ...
- Linux 下centos7启动 Tomcat 抛出Can't connect to X11 window server 问题的解决方法
1 问题 今天启动 Tomcat 后,登录页验证码不见了.在 localhost.xxx.log 发现以下错误: org.apache.catalina.core.StandardWrapperVal ...
- Ionic3 Demo
本文为原创文章,转载请标明出处 最近又开源了一个小 Demo,基于 Ionic 3.9.2.注册登录功能使用的是 WildDog 野狗通信云,大家可以放心的注册登录玩.电影相关数据来源自"某 ...
- JXJJOI2018_三题
这次比赛的话其实还挺满意的,虽然T1 20pts(指的是分数,考试时知道有坑但是考完都没找到的我就知道切不掉这题qwq),T3爆零是在意料之外,不过其实T2贪心能切掉也是意料之外的,所以作此判断.当然 ...
- 你还记得2017年火爆的VR街机店,这一年他们过得还好吗?
对于当下太过急于成功.一夜暴富的人们来说,似乎总是会急不可耐地去抓住每一个有可能成为大势的风口.在这份普遍存在的浮躁心理下,蕴含着极大的不确定性--既让大众认识到太多的创新产品和服务,也让很多参与者痛 ...