通过命令行使用InsECTJ

最近在重新修改和配置之前的一个项目,其中用到了InsECTJ,其主页如下:
http://insectj.sourceforge.net/

当然,Java的profiler很多,在这里一方面是因为历史原因需要使用InsECTJ,另一方面,我觉得InsECTJ的使用确实比较简单。InsECTJ基于Java的agent实现,可以动态进行instrumentation,所以相比于使用Soot, ASM或BCEL直接去instrument要方便一点。

InsECTJ本身是以Eclipse插件的形式发布的,而且在用户手册里面没有介绍如何通过命令行来使用。插件在选择所要profile或instrument的代码以及控制所要使用的monitor方面,确实具备有较好的灵活性。但如果想把InsECTJ集成到一个自动化的流程里面,可能还是需要用命令行或者Ant这种工具来调用InsECTJ。这里想记录一下本人通过命令行使用InsECTJ的一点尝试。

第一步,准备一些库
InsECTJ本身的runtime.jar和probes.jar。这2个jar包可以在安装了InsECTJ的插件之后,在Eclipse的plugin目录的edu.gatech.cc.rtinsect.probes_1.1.8和edu.gatech.cc.rtinsect_1.1.8子目录下找到。另外,InsECTJ还有一个UI的jar,在这里不用到,就不管它了。


第二步,写配置文件
这里需要新建一个insectj_config.xml文件,顾名思义就是InsECTJ的配置文件。该文件主要用于说明用哪个probe来monitor哪些class或method。如下是一个配置文件的例子:
<?xml version="1.0" encoding="ISO-8859-1"?>
<insectconfig>
<settings verbose="false" dump="true" dumpdir="instrumented"/>
<probe class="edu.gatech.cc.rtinsect.inserters.BranchProbeInserter" monitor="monitor.Monitor1" arguments=""/>
<probe class="edu.gatech.cc.rtinsect.inserters.MethodCallProbeInserter" monitor="monitor.Monitor1" arguments=""/>
<probe class="edu.gatech.cc.rtinsect.inserters.UseProbeInserter" monitor="monitor.Monitor1" arguments=""/>
<probe class="edu.gatech.cc.rtinsect.inserters.BasicBlockProbeInserter" monitor="monitor.Monitor1" arguments=""/>
<instrument>Test1.InsectJTest1
Test1.InsectJTest1 add( int)
Test1.InsectJTest1 main( String[])
Test1.InsectJTest1 minus( int)
</instrument>
</insectconfig>


第三步,写自己的probe
这里的probe一般是用户自己写的一个class,用于处理运行时搜集到的数据。具体写法可参见InsECTJ的用户手册或者网上的一篇简单的介绍:
http://dl.iteye.com/topics/download/7c04089b-0be5-3c29-8545-75cb18f50e38

第四步,写命令行,运行。
在准备好了所需要的jar包、配置文件和probe之后,就是写出命令行来调用InsECTJ了。
一个简单的例子如下:
java -javaagent:runtime.jar=insectj_config.xml -cp .;probes.jar;classes/ Test1.InsectJTest1

(由于是边试边写的,好像有些虎头蛇尾...,回头有什么可以补充的,我再写到评论里面吧


       



你可能感兴趣的:(命令行)