Oracle® Developer Studio 12.5:使用 dbx 调试程序

退出打印视图

更新时间: 2016 年 6 月
 
 

定制 JVM 软件的启动

可以使用环境变量 jvm_invocation 定制 JVM 软件的启动。缺省情况下,环境变量 jvm_invocation 未定义时,dbx 将按以下方式启动 JVM 软件

java -agentlib:dbx_agent=sync=process-ID

定义环境变量 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 软件的路径名

缺省情况下,如果不指定 JVM 软件的路径名,dbx 将在您的路径中启动 JVM 软件。

要指定 JVM 软件的路径名,请将 jvm_invocation 环境变量设置为正确的路径名,如以下示例所示。

jvm_invocation="/myjava/java -Xdebug"

此设置会使 dbx 按以下方式启动 JVM 软件:

/myjava/java –agentlib:dbx_agent=sync

将运行参数传递给 JVM 软件

要将运行参数传递给 JVM 软件,请对环境变量 jvm_invocation 进行设置,以使用那些参数启动 JVM 软件,如下例所示。

jvm_invocation="java -Xdebug -Xms512 -Xmx1024 -Xcheck:jni"

此示例将导致 dbx 按如下方式启动 JVM 软件:

java –agentlib:dbx_agent=sync= -Xms512 -Xmx1024 -Xcheck:jni

指定 Java 应用程序的定制包装器

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

指定 64 位 JVM 软件

如果需要 dbx 启动 64 位 JVM 软件,以调试一个需要 64 位对象库的应用程序,请在设置 jvm_invocation 环境变量时包括 -d64 选项。

jvm_invocation="/myjava/java -Xdebug -d64"