ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ Oracle Solaris Studio 12.3 Information Library (日本語) |
17. dbx による Java アプリケーションのデバッグ
Java アプリケーションを埋め込む C/C++ アプリケーションのデバッグ
Java または JNI モードからネイティブモードへの切り替え
次のことを行うために、dbx からの JVM ソフトウェアの起動方法のカスタマイズが必要になることがあります。
JVM ソフトウェアのパス名を指定します (「JVM ソフトウェアのパス名の指定」を参照)。
JVM ソフトウェアに run の引数を渡します (「JVM ソフトウェアへの実行引数の引き渡し」を参照)。
Java アプリケーションの実行に際してデフォルトの Java ラッパーではなく独自のラッパーを指定します (「Java アプリケーション用の独自のラッパーの指定」を参照)。
64 ビットの JVM ソフトウェアを指定します (「64 ビット JVM ソフトウェアの指定」を参照)。
JVM ソフトウェアの起動方法のカスタマイズは、jvm_invocation 環境変数を使って行うことができます。jvm_invocation 環境変数が定義されていない場合、デフォルトでは dbx は次の設定で JVM ソフトウェアを起動します。
java -Xdebug -Xnoagent -Xrundbx_agent:syncpid
jvm_invocation 環境変数が定義されている場合は、その変数の値を使って 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 が起動されるようにスクリプトを変更する。
#!/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"