用javassist调试程序

当我研究一些复杂源码(比如Hibernate)的时候,常常需要程序运行期,某个变量的状态是什么。

通常做法是导入Hibernate的源码,编译,然后加断点或者System.out。

可是,导入源码常常是很麻烦,源码量也大,我只是为了看一个变量状态,至于这么麻烦吗。

 

这个时候javassist工具就可以帮忙了。

 

曾经大致的比较了一下这类工具:cglib/asm/javassist

cglib基于asm是干不了这个的,因为所有需要修改的对象都必须enhance过。

asm当然可以干这个,不过我必须理解诸如:

ALOAD 0

ILOAD 1

ACONST_NULL

之类的指令,太累了。

在看看javassit,功能不够强大,但是正好够用!

 

这段代码的含义很简单:

在org.hibernate.impl.SessionImpl类的save(Object object)方法的第0行插入:

System.out.println("执行SessionImpl.save");

 

如果此方法参数是简单类型,只需要ClassPool.getDefault().getCtClass("boolean")就可以

 

这样,可以随便在以存在的class里加入任何代码,以达到调试代码的目的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值