Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ

dbx の Java コードデバッグモード

Java アプリケーションのデバッグの場合、dbx は次の 3 つのモードのいずれかで動作します。

Java または JNI (Java Native Interface) モードでは、JNI コードを含めて Java アプリケーションの状態を調べ、コードの実行を制御することができます。ネイティブモードでは、C または C++ JNI コードの状態を調べることができます。現在のモード (javajninative) は、jdbx_mode 環境変数に記憶されます。

Java モードでは、Java 構文を使用して dbx と対話します。dbx も Java 構文を使用して情報を提供します。このモードは、純粋な Java コードか、Java コードと C JNI または C++ JNI コードが混在するアプリケーション内の Java コードのデバッグに使用します。

JNI モードでは、dbx はネイティブの構文を使用して、ネイティブコードにだけ作用しますが、コマンドの出力には、ネイティブの状態ばかりでなく、Java 関係の状態も示されるため、JNI モードは「混在」モードです。このモードは、Java コードと C JNI または C++ JNI コードが混在するアプリケーションのネイティブ部分のデバッグに使用します。

ネイティブモードでは、dbx コマンドはネイティブのプログラムにだけ作用し、Java 関係の機能はすべて無効になります。このモードは Java が関係しないプログラムのデバッグに使用します。

Java アプリケーションを実行すると、dbx は状況に応じて Java モードと JNI モードを自動的に切り替えます。たとえば、Java ブレークポイントを検出すると、dbx は Java モードに切り替わり、Java コードから JNI コードに入ると、JNI モードに切り替わります。

Java または JNI モードからネイティブモードへの切り替え

dbx は、自動的にはネイティブモードに切り替わりません。Java または JNI モードからネイティブモードへは joff コマンド、ネイティブモードから Java モードへは jon コマンドを使って明示的に切り替えることができます。

実行中断時のモードの切り替え

たとえば Ctrl-C を使って Java アプリケーションの実行が中断された場合、dbx はアプリケーションを安全な状態にして、すべてのスレッドを一時停止することによって、自動的にモードを Java/JNI モードに切り替えようとします。

アプリケーションを一時停止して Java/JNI モードに切り替えることができない場合、dbx はネイティブモードに切り替わります。 この場合でも、jon コマンドを使用して、Java モードに切り替え、プログラムの状態を調べることができます。