用javassist调试程序
来源:互联网 发布:新浪国际足球数据库 编辑:程序博客网 时间:2024/06/08 11:18
当我研究一些复杂源码(比如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里加入任何代码,以达到调试代码的目的
- 用javassist调试程序
- javassist
- Javassist
- Javassist
- JAVAssist
- Javassist
- javassist
- 用 Javassist 进行类转换
- 用GDB调试程序
- 用 GDB 调试程序
- 用 GDB 调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用 GDB 调试程序
- 用 GDB 调试程序
- 用GDB调试程序
- 用GDB调试程序
- :linux内核编译过程的最终总结版
- 学习链接
- ASP.NET中前台javascript与后台代码调用
- ASP.NET C#验证码控件使用
- shannon编码
- 用javassist调试程序
- asp.net中前台javascript与c#函数相互调方法(http://hi.baidu.com/tracyjay/blog/item/fac2063700b0ea45241f14c2.html)
- SPFA(Shortest Path Faster Algorithm)学习手记
- 服务器远程管理好助手!
- SEO资源引用
- asp.net中前台javascript与c#函数相互调方法(http://hi.baidu.com/tracyjay/blog/item/fac2063700b0ea45241f14c2.html)
- Linux内核代码分析 slab.c by 刘亢
- 视频系统设计估算方案
- 转:Access to the path "c:/windows/microsoft.net/framework/v1.1.4322/Temporary ASP.NET Files/root/xxxxx/xxxxx" is denied.