Eclipseでバッチ起動のJavaプログラムをデバッグ(ステップ実行)する 改訂版

今年も残すところあとわずかですね。過去の自分に嫌気がさしたので、ちゃんと書いておきます。

Eclipse」「 bat」 「デバッグ」とかで検索していただくことが結構あるようなのですが、 

自分でこの記事見ててやっつけすぎてわからなかったのでw

書き直します。

Javaを実行するバッチを書く

execute.bat

SET CONTEXT="C:\eclipse4.2\workspace\Debug"
SET REMOTE_DEBUG="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"
call %JAVA_HOME%\bin\java.exe -cp %CONTEXT%\bin\ %REMOTE_DEBUG% -Dvmarg="HelloWorld_VMArg" sample.Debug "HelloWorld_JAVAARG"
pause

全部で4行です。
コピペしてもらえれば、ちゃんとペーストできると思います。

1行目

このbatを置いてあるプロジェクトを変数CONTEXTにセット。 ステップ実行したいJavaファイルもこのディレクトリに置いています。

2行目

REMOTE_DEBUG変数にJavaコマンド実行時に与えるリモートデバッグ用の引数をセットしています。

3行目

Javaクラス「Debug」を実行する部分です。
Javaコマンドの引数に-cpでクラスパスを指定。「%CONTEXT%\bin\」の部分。
2行目で設定したREMOTE_DEBUG変数を引数として指定。「%REMOTE_DEBUG%」の部分。
VM引数としてvmargという名前で文字列「HelloWorld_VMArg」を指定。
実行するJavaプログラムを指定「sample.Debug」の部分。
Javaプログラム「sample.Debug」の引数として文字列「HelloWorld_JAVAARG」を指定。

Javaプログラムを書く

Javaファイル「Debug」の中身はこんな感じです。

package sample;

public class Debug {
    public static void main(String[] args) {
        System.out.println("");
        System.out.println("java引数 → " + args[0]);
        String vmarg = System.getProperty("vmarg");
        System.out.println("VM引数 → " + vmarg);
    }
}

java引数とVM引数の値をprintしているだけです。

プロジェクト構成はこんな感じです。

f:id:kijitoraneko:20121220172817j:plain


batを実行する

execute.batを実行します。普通にダブルクリックすれば実行されますね。

こんな形で止まるはずです。

f:id:kijitoraneko:20121227170715j:plain


Eclipseでリモートデバッグする

Debugプロジェクトを右クリック >> Debug As >> Debug Configuration  以下の画面のようにRemote Java Applicationを作成

f:id:kijitoraneko:20121227170920j:plain

で、Debugボタンをポチればいいのですが、その前にDebug.javaEclipseブレークポイント入れというてくださいね。 で、ポチ! するとブレークポイントで止まります。

f:id:kijitoraneko:20121227171506j:plain

ステップ実行していくとコンソールにprintデバック結果も表示されることでしょう。

f:id:kijitoraneko:20121227171635j:plain


なんか、かつかつで大規模なバッチプログラムとかprint文仕込んでデバックするのいやですよね。 あり得ないでしょう!

以上です。