– 昨日の一件のおかげで初めて Java のデバッガを使うことに。
– デバッグ対象の JVM のオプションに
-Xdebug -Xrunjdwp:transport=dt_socket,address=50000,server=y,suspend=n
を追加して実行(Resin の場合は httpd.sh の args=”…” を -J-Xdebug -J-Xrunjdwp:…のように -J を付与)しておけば次のようなデバッグができる。
$ jdb -attach 50000
threads
グループ tcp-server:
(java.lang.Thread)0x3b0 tcp-accept-8080 実行中
(java.lang.Thread)0x3b1 tcp-accept-8080 状況待機中
(java.lang.Thread)0x3b2 tcpConnection-8080-0 状況待機中thread 0x3b2
tcpConnection-8080-0[1] suspend
すべてのスレッドが中断されました。
tcpConnection-8080-0[1] where
[1] java.lang.Object.wait (ネイティブ メソッド)
[2] com.caucho.server.TcpServer.accept (TcpServer.java:648)
[3] com.caucho.server.TcpConnection.accept (TcpConnection.java:211)
[4] com.caucho.server.TcpConnection.run (TcpConnection.java:132)
[5] java.lang.Thread.run (Thread.java:534)
tcpConnection-8080-0[1] resume
すべてのスレッドが再開されました。quit
という感じでかなり便利。
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/win32/jdb.html#description
– Sun JDK ドキュメント: jdb – Java デバッガ