Javaアプリのデバッグ及びTomcatやJBoss、Weblogic、JRunなどでのリモートデバッグ方法
2010/12/17 16:36Update
Javaアプリに何らかのエラーやExceptionが発生した場合、実際のソースを見て解析することは一つの手ですが、ロジックが複雑であり、ソースを見ても分からなかった場合、デバッグ機能を利用したほうがずっと直観的であり、便利です。
Javaでは、Java Platform Debugger Architecture (JPDA)というアーキテクチャでJavaデバッグ機能を全面サポートします。
Javaでは、デバッグ機能を利用するのは、JVM内のデバッグ機能を有効にしなければなりません。
方法としては、
1)Java デバッガ jdb でJavaアプリを起動する
例:java -Xdebug -Xrunjdwp:transport=dt_shmem,address=jdbconn,server=y,suspend=n
2)Javaコマンドに-Xdebug オプションを設定する
例:java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n myApp
などがあります。
1)バックエンド:デバッグされるJavaアプリをデバッグ機能有効で起動する。実行環境(TomcatやJBoss、Weblogic、JRun、Javaアプリ、Java Appletなど)側に-Xdebug などのオプションでJVM内のデバッグ機能を有効にする
設定例:
Tomcatのデバッグモードの起動オプション:
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8080
JBossのデバッグモードの起動オプション:
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
WebLogicのデバッグモードの起動オプション:
set JAVA_OPTS= -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
※address(ポート)は変更可能で、適当で設定すればよい。
※稼動するOSにあわせて起動するスクリプトを修正してください。
※その他サーバでもリモートデバッグしたい場合、ほとんど同じような設定でデバッグ機能付けで起動できます。
2)フロントエンド:デバッグする(Eclipse, Netbean, JBuilderなど)側はデバッグされる側のJVMに接続(jdb -attach)する
これらのIDEでは、グラフィカルな Java デバッガーのフロント・エンドが既に含まれており、ちょっとした設定で、簡単にデバッグ機能でアプリを起動したり、デバッグJVMに接続したりデバッグを行うことができます。
詳細について、参考資料のリンクをご参照ください。
1)Javaアプリケーションのデバッグの起動方法
①Javaソースにブレークポイントを設定する
②Run>Debug As>Java Application (実行>デバッグ>Javaアプリケーション)
2)リモートデバッグの起動・設定方法
①バックエンド側でデバッグ機能を有効で起動する(上の紹介した方法をご参照)
②Javaソースにブレークポイントを設定する
③Run>Debug Configurations>Remote Java Application:ダブルクリックでリモートデバッグの設定を新規作成
(実行>構成およびデバッグ>リモートJavaアプリケーション)
※Connection Type:Standard(Socket Attach) (接続タイプ:標準(ソケット接続))
※Host:リモートサーバのIPアドレス (ホスト:)
※Port:リモートサーバのポート (ポート:)
④Debug ボタンを押下 (デバッグ ボタン)
⑤ブラウザーなどでデバッグしたいのページのURLをアクセス
※これで、ブレークポイントで実行が中断され、デバッグモードに入ります。
jdb - Java デバッガ
Eclipse を使ってリモートで Java アプリケーションをデバッグする
リモートデバッグ - EclipseWiki
Sysdeo Eclipse Tomcat Launcher plugin - EclipseからTomcatを制御するためのプラグイン 
※Eclipse上で動作するTomcatプラグインで、Eclipseから簡単にTomcatサーバをデバッグモードで起動及び接続する機能を提供します。
Java Platform Debugger Architecture
バックエンドのデバッグ機能を有効にする方法
Javaでは、デバッグ機能を利用するのは、JVM内のデバッグ機能を有効にしなければなりません。
方法としては、
1)Java デバッガ jdb でJavaアプリを起動する
例:java -Xdebug -Xrunjdwp:transport=dt_shmem,address=jdbconn,server=y,suspend=n
2)Javaコマンドに-Xdebug オプションを設定する
例:java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n myApp
などがあります。
デバッグの手順
1)バックエンド:デバッグされるJavaアプリをデバッグ機能有効で起動する。実行環境(TomcatやJBoss、Weblogic、JRun、Javaアプリ、Java Appletなど)側に-Xdebug などのオプションでJVM内のデバッグ機能を有効にする
設定例:
Tomcatのデバッグモードの起動オプション:
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8080
JBossのデバッグモードの起動オプション:
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
WebLogicのデバッグモードの起動オプション:
set JAVA_OPTS= -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
※address(ポート)は変更可能で、適当で設定すればよい。
※稼動するOSにあわせて起動するスクリプトを修正してください。
※その他サーバでもリモートデバッグしたい場合、ほとんど同じような設定でデバッグ機能付けで起動できます。
2)フロントエンド:デバッグする(Eclipse, Netbean, JBuilderなど)側はデバッグされる側のJVMに接続(jdb -attach)する
これらのIDEでは、グラフィカルな Java デバッガーのフロント・エンドが既に含まれており、ちょっとした設定で、簡単にデバッグ機能でアプリを起動したり、デバッグJVMに接続したりデバッグを行うことができます。
詳細について、参考資料のリンクをご参照ください。
Eclipseでのデバッグ
1)Javaアプリケーションのデバッグの起動方法
①Javaソースにブレークポイントを設定する
②Run>Debug As>Java Application (実行>デバッグ>Javaアプリケーション)
2)リモートデバッグの起動・設定方法
①バックエンド側でデバッグ機能を有効で起動する(上の紹介した方法をご参照)
②Javaソースにブレークポイントを設定する
③Run>Debug Configurations>Remote Java Application:ダブルクリックでリモートデバッグの設定を新規作成
(実行>構成およびデバッグ>リモートJavaアプリケーション)
※Connection Type:Standard(Socket Attach) (接続タイプ:標準(ソケット接続))
※Host:リモートサーバのIPアドレス (ホスト:)
※Port:リモートサーバのポート (ポート:)
④Debug ボタンを押下 (デバッグ ボタン)
⑤ブラウザーなどでデバッグしたいのページのURLをアクセス
※これで、ブレークポイントで実行が中断され、デバッグモードに入ります。
参考資料
jdb - Java デバッガ
Eclipse を使ってリモートで Java アプリケーションをデバッグする
リモートデバッグ - EclipseWiki
Sysdeo Eclipse Tomcat Launcher plugin - EclipseからTomcatを制御するためのプラグイン 
※Eclipse上で動作するTomcatプラグインで、Eclipseから簡単にTomcatサーバをデバッグモードで起動及び接続する機能を提供します。
Java Platform Debugger Architecture
Sponsored Link
Comments
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)