可能需要通过 dbx 定制 JVM 软件的启动,以便执行以下操作:
为 JVM 软件指定路径名(请参见指定 JVM 软件的路径名)
将一些运行参数传递到 JVM 软件(请参见将运行参数传递给 JVM 软件)
指定定制包装器而不是缺省的 Java 包装器,供运行 Java 应用程序时使用(请参见指定 Java 应用程序的自定义包装器)
指定 64 位 JVM 软件(请参见指定 64 位 JVM 软件)
可以使用环境变量 jvm_invocation 定制 JVM 软件的启动。缺省情况下,环境变量 jvm_invocation 未定义时,dbx 将按以下方式启动 JVM 软件
java -Xdebug -Xnoagent -Xrundbx_agent:syncpid |
定义环境变量 jvm_invocation 后,dbx 会使用该变量的值来启动 JVM 软件。
必须在环境变量 jvm_invocation 的定义中包括 -Xdebug 选项。dbx 会将 -Xdebug 扩展为内部选项 -Xdebug- Xnoagent -Xrundbxagent::sync。
如果不在定义中包括 -Xdebug 选项,如下例所示,dbx 会显示错误消息。
jvm_invocation="/set/java/javasoft/sparc-S2/jdk1.2/bin/java" |
dbx: Value of `$jvm_invocation’ must include an option to invoke the VM in debug mode |
缺省情况下,如果不指定 JVM 软件的路径名,dbx 将在您的路径中启动 JVM 软件。
要指定 JVM 软件的路径名,请将环境变量 jvm_invocation 设置为相应的路径名,如下例所示。
jvm_invocation="/myjava/java -Xdebug" |
此设置会使 dbx 按以下方式启动 JVM 软件:
/myjava/java -Djava.compiler=NONE -Xdebug -Xnoagent -Xrundbx_agent:sync |
要将运行参数传递给 JVM 软件,请对环境变量 jvm_invocation 进行设置,以使用那些参数启动 JVM 软件,如下例所示。
jvm_invocation="java -Xdebug -Xms512 -Xmx1024 -Xcheck:jni" |
这将使 dbx 按以下方式启动 JVM 软件:
java -Djava.compiler=NONE -Xdebug -Xnoagent -Xrundbx_agent:sync= -Xms512 -Xmx1024 -Xcheck:jni |
Java 应用程序可以使用定制包装器来启动。如果应用程序使用定制包装器,便可以使用环境变量 jvm_invocation 来指定要使用的包装器,如下例所示。
jvm_invocation="/export/siva-a/forte4j/bin/forte4j.sh -J-Xdebug" |
这将使 dbx 按以下方式启动 JVM 软件:
/export/siva-a/forte4j/bin/forte4j.sh - -J-Xdebug -J-Xnoagent -J-Xrundbxagent:sync=process_id |
以下包装器脚本 (xyz) 会设置几个环境变量并接受命令行选项:
#!/bin/sh CPATH=/mydir/myclass:/mydir/myjar.jar; export CPATH JARGS="-verbose:gc -verbose:jni -DXYZ=/mydir/xyz" ARGS= while [ $# -gt 0 ] ; do case "$1" in -userdir) shift; if [ $# -gt 0 ] ; then userdir=$1; fi;; -J*) jopt=`expr $1 : ’-J<.*>’` ; JARGS="$JARGS ’$jopt’";; *) ARGS="$ARGS ’$1’" ;; esac shift done java $JARGS -cp $CPATH $ARGS |
此脚本接受 JVM 软件和用户应用程序的某些命令行选项。对于这种形式的包装器脚本,可设置环境变量 jvm_invocation 并按以下方式启动 dbx:
% jvm_invocation="xyz -J-Xdebug -Jany other java options" % dbx myclass.class -Dide=visual |
以下包装器脚本 (xyz) 会设置几个环境变量并启动 JVM 软件,但不接受任何命令行选项或类名:
#!/bin/sh CLASSPATH=/mydir/myclass:/mydir/myjar.jar; export CLASSPATH ABC=/mydir/abc; export ABC java <options> myclass |
可以通过 dbx 并采用以下两种方法之一,使用此类脚本来调试包装器:
可以对脚本进行修改,即将变量 jvm_invocation 的定义添加到脚本中并启动 dbx,以从包装器脚本内部启动 dbx:
#!/bin/sh CLASSPATH=/mydir/myclass:/mydir/myjar.jar; export CLASSPATH ABC=/mydir/abc; export ABC jvm_invocation="java -Xdebug <options>"; export jvm_invocation dbx myclass.class |
修改后,便可运行脚本来启动调试会话。
可以略微修改脚本来接受某些命令行选项,如下所示:
#!/bin/sh CLASSPATH=/mydir/myclass:/mydir/myjar.jar; export CLASSPATH ABC=/mydir/abc; export ABC JAVA_OPTIONS="$1 <options>" java $JAVA_OPTIONS $2 |
修改后,便可设置环境变量 jvm_invocation,并按以下方式启动 dbx:
% jvm_invocation="xyz -Xdebug"; export jvm_invocation % dbx myclass.class |
如果希望 dbx 启动 64 位 JVM 软件来调试需要 64 位对象库的应用程序,请在设置环境变量 jvm_invocation 时包含 -d64 选项:
jvm_invocation="/myjava/java -Xdebug -d64" |