メソッドがあり、デバッグせずにその中の変数を調べたい - Java で可能ですか?
次のような大量のコードを書きたくありません。
System.out.println("a: " + a);
私は次のようなことをしたい:
System.out.printLocals();
また、次のようなものがあれば素晴らしいはずです。
System.out.printMembersOf(someObjectInstance);
メソッドがあり、デバッグせずにその中の変数を調べたい - Java で可能ですか?
次のような大量のコードを書きたくありません。
System.out.println("a: " + a);
私は次のようなことをしたい:
System.out.printLocals();
また、次のようなものがあれば素晴らしいはずです。
System.out.printMembersOf(someObjectInstance);
私は次のようなものが欲しい:
System.out.printLocals();
また、次のようなものがあれば素晴らしいはずです。
System.out.printMembersOf(someObjectInstance);
ほぼすべての Java クラスにはtoString
メソッドがあります。そのメソッドをオーバーライドすると、求めているものを表す文字列を取得できます。
Eclipse Helios などの IDE は、基本的なtoString
メソッドを生成します。
さて、varargs パラメーターを使用してメソッドを作成し、次のように書くことができます。
dump(variable1, variable2, variable3, variable4, ...);
理想的ではありませんが、状況によっては十分です。ただし、メソッドからすべてのローカル変数を自動的に取得してダンプする方法はありません。
それを実行できる何らかのバイトコード操作 (たとえばBCELを使用) を検討するかもしれませんが、それはかなり醜いでしょう。
を使用System.out.println
して変数を出力できます。例:
int i = 42;
System.out.println("i:" + i);
デバッガーであっても、実行時にローカル変数の値を読み取るのは簡単ではありません。クラスにデバッグシンボルがない場合、デバッガーを使用していても、ローカル変数を表示する方法はまったくありません。
値を確認するための最も簡単な解決策は、ログを使用して、System.out.println()
またはログを使用して値を出力することです(slf4j)。
コードを変更せずに実行時にローカル変数を例証したい場合は、AOP(アスペクト指向プログラミング)を試すことができます。または、デバッガーが実行中のVMを調べるために使用するのと同じAPIを使用できます。
「調べる」とはどういう意味ですか?オブジェクトの場合は System.out.println(yourvariable) または (yourvariable.toString()) を試してください。コンソールに表示されます。