Java程序分析平台Jchord简介


======================================================
注:本文源代码点此下载
======================================================

java程序分析平台jchord简介

jchord是一个独立的java程序分析平台,它为用户提供众多标准分析,包括线程逃逸分析,静态切片分析,死锁分析,数据竞争分析等;同时,它允许用户编写和运行自己的分析。有关jchord的资料可以从http://code.google.com/p/jchord/下载。

jchord包括binary版和source版,本文的介绍基于source版本。

下载source版

从上述地址下载source版本的jchord,得到名为chord-src-2.0.tar.gz的压缩文件,解压到指定目录。

编译source版

source版的编译需要如下软件:

1.java5或更高版本的jvm;

2.apache ant,一个java生产工具。

ant的配置可参考http://blog.csdn.net/huanghm88/article/details/3965218。jvm和ant安装完成后,开始编译jchord。

在jchord的主目录下包括一个build.xml文件,它可以被apache ant解释执行,要编译jchord运行如下命令:ant compile。它可以从src/文件夹中编译java源文件生成java字节码文件,放到新生成的classes/文件夹中;同时,从lib/库文件中生成chord.jar文件。

运行jchord

编译完成source之后,下面开始运行jchord。

jchord的分析基于java字节码程序,用户通过定义系统属性来指定jchord将要完成的功能。其命令行格式如下:

ant -d= ... -d= run

其中,keyi为指定的系统属性,vali为系统属性值。除上述定义系统属性的方法外,还可以将常用的系统属性写入到chord.properties文件中。chord.properties文件存在于每个需要被分析的java程序中,jchord执行之前将首先载入此文件中的所有系统属性,具体可参见examples文件夹下的几个例子。

下面讲解几个常用的系统属性:

1.chord.work.dirjchord运行时的工作目录,默认为当前目录;

2.chord.props.filechord.properties文件路径,默认为[chord.work.dir]/chord.properties;

3.chord.src.pathjava源程序路径;

4.chord.class.pathjava字节码文件路径;

5.chord.main.classjava程序主类名;

6.chord.max.heapjchord运行时使用的最大堆栈空间,默认值为1024m,运行时应自行改小。

接下来以source版本中自带的死锁程序为例讲解如何运行jchord。

在jchord主目录下进入examples/deadlock-test文件夹,运行如下命令:ant。若成功运行将产生classes文件夹,同时命令行中生成如下内容:

buildfile: c:\examples\deadlock_test\build.xml

compile:

[mkdir] created dir: c:\examples\deadlock_test\classes

[javac] compiling 1 source file to c:\examples\deadlock_test\classes

build successful

total time: 3 seconds

然后运行如下命令:ant -dchord.work.dir=examples/deadlock_test -dchord.run.analyses=deadlock-java run。成功运行将在命令行中生成如下内容:

buildfile: c:\build.xml

run:

[java] chord run initiated at: 2011-11-23 22:08:26

[java] enter: deadlock-java at wed nov 23 22:08:29 cst 2011

[java] enter: l at wed nov 23 22:08:29 cst 2011

[java] enter: m at wed nov 23 22:08:29 cst 2011

[java] enter: rta

[java] iteration: 0

[java] iteration: 1

[java] iteration: 2

[java] iteration: 3

[java] iteration: 4

[java] leave: rta

[java] time: 00:00:17:209 hh:mm:ss:ms

[java] saving dom m size: 5799

[java] leave: m

[java] exclusive time: 00:00:17:480 hh:mm:ss:ms

[java] inclusive time: 00:00:17:480 hh:mm:ss:ms

[java] saving dom l size: 288

[java] leave: l

[java] exclusive time: 00:00:00:068 hh:mm:ss:ms

[java] inclusive time: 00:00:17:548 hh:mm:ss:ms

……

build successful

total time: 40 seconds

同时,在工作目录中生成chord_output文件夹,jchord分析结果保存在html文件中。结果截图如下:

至此,就介绍完了jchord的基本用法,有关jchord的更深层次的内容笔者正在研究中。

ps:

事实上,笔者并未真正得到上面的html文件(上图是在谷歌代码中截取的),在运行jchord的最后一步产生了莫名其妙的问题,命令行中输出了如下内容:

buildfile: c:\build.xml

run:

[java] chord run initiated at: 2011-11-23 22:08:26

[java] enter: deadlock-java at wed nov 23 22:08:29 cst 2011

[java] enter: l at wed nov 23 22:08:29 cst 2011

[java] enter: m at wed nov 23 22:08:29 cst 2011

[java] enter: rta

[java] iteration: 0

[java] iteration: 1

[java] iteration: 2

[java] iteration: 3

[java] iteration: 4

[java] leave: rta

[java] time: 00:00:17:209 hh:mm:ss:ms

[java] saving dom m size: 5799

[java] leave: m

[java] exclusive time: 00:00:17:480 hh:mm:ss:ms

[java] inclusive time: 00:00:17:480 hh:mm:ss:ms

……

[java] enter: mputstatfldinst at wed nov 23 22:09:06 cst 2011

[java] saving rel mputstatfldinst size: 967

[java] leave: mputstatfldinst

[java] exclusive time: 00:00:00:214 hh:mm:ss:ms

[java] inclusive time: 00:00:00:214 hh:mm:ss:ms

[java] enter: statim at wed nov 23 22:09:06 cst 2011

[java] saving rel statim size: 3452

[java] leave: statim

[java] exclusive time: 00:00:00:241 hh:mm:ss:ms

[java] inclusive time: 00:00:00:241 hh:mm:ss:ms

[java] starting command: 'nice -n10 java -ea -xmx1024m -cp e:\chord-src-2.0

\chord.jar -dverbose=1 -dbdd=j -dbasedir=e:\chord-src-2.0\examples\deadlock_test

\chord_output\bddbddb net.sf.bddbddb.solver e:\chord-src-2.0\examples\deadlock_t

est\chord_output\chord_analyses_alias_cipa_0cfa.dlog '

[java] command 'nice -n10 java -ea -xmx1024m -cp e:\chord-src-2.0\chord.jar

-dverbose=1 -dbdd=j -dbasedir=e:\chord-src-2.0\examples\deadlock_test\chord_out

put\bddbddb net.sf.bddbddb.solver e:\chord-src-2.0\examples\deadlock_test\chord_

output\chord_analyses_alias_cipa_0cfa.dlog ' terminated abnormally: cannot run p

rogram "nice": createprocess error=2, ?????????

build successful

total time: 40 seconds

上面高亮部分‘nice -n10’是不应该出现的。如有读者遇到同样问题或知道出现异常原因,可留言讨论。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值