Java 应用程序可使用定制包装器执行启动。如果应用程序使用定制包装器,则您可使用 jvm_invocation 环境变量指定要使用的包装器,如以下示例所示。
jvm_invocation="/export/siva-a/forte4j/bin/forte4j.sh -J-Xdebug"
此示例将导致 dbx 按如下方式启动 JVM 软件:
/export/siva-a/forte4j/bin/forte4j.sh - –agentlib:dbx_agent=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 -J 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