Edited at

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

More than 5 years have passed since last update.


Javaプログラムを書く


Eclipseのプロジェクト構成

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

Hello.javaでなくてDebug.javaでした。スクリーンショットが間違っています。(私のミスです!)

Hello.javaではなく、以後もDebug.javaとして出てきますので、Debug.javaというクラスを作成してください。


実行するJavaファイル

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


Debug.java

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);
}
}


処理としてはmainへ渡す引数とVM引数の値をprintしているだけです。


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"を指定。


batを実行する

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

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


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


設定の作成

パッケージエクスプローラのDebugプロジェクトを右クリック >> Debug As >> Debug Configurationで 

以下の画面のようにRemote Java Applicationを作成


実行

あとはDebugボタンをポチればいいのですが、その前にDebug.javaにEclipseでブレークポイント入れておいてくださいね。

で、ポチ!

するとブレークポイントで止まります。

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

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

あり得ないでしょう!

以上です。