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<key1>=<val1> ... -D<keyN>=<valN> run

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

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

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

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

    3.chord.src.path      java源程序路径;

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

    5.chord.main.class   java程序主类名;

    6.chord.max.heap   Jchord运行时使用的最大堆栈空间,默认值为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’是不应该出现的。如有读者遇到同样问题或知道出现异常原因,可留言讨论。

posted on 2011-11-23 22:42  天醒  阅读(452)  评论(6编辑  收藏  举报

导航