8

メソッドがあり、デバッグせずにその中の変数を調べたい - Java で可能ですか?

次のような大量のコードを書きたくありません。

System.out.println("a: " + a);

私は次のようなことをしたい:

System.out.printLocals();

また、次のようなものがあれば素晴らしいはずです。

System.out.printMembersOf(someObjectInstance);
4

6 に答える 6

3

私は次のようなものが欲しい:System.out.printLocals();

また、次のようなものがあれば素晴らしいはずです。System.out.printMembersOf(someObjectInstance);

ほぼすべての Java クラスにはtoStringメソッドがあります。そのメソッドをオーバーライドすると、求めているものを表す文字列を取得できます。

Eclipse Helios などの IDE は、基本的なtoStringメソッドを生成します。

于 2011-03-18T17:48:21.677 に答える
3

さて、varargs パラメーターを使用してメソッドを作成し、次のように書くことができます。

dump(variable1, variable2, variable3, variable4, ...);

理想的ではありませんが、状況によっては十分です。ただし、メソッドからすべてのローカル変数を自動的に取得してダンプする方法はありません。

それを実行できる何らかのバイトコード操作 (たとえばBCELを使用) を検討するかもしれませんが、それはかなり醜いでしょう。

于 2011-03-18T16:45:11.300 に答える
1

を使用System.out.printlnして変数を出力できます。例:

int i = 42;
System.out.println("i:" + i);
于 2011-03-18T16:44:02.180 に答える
1

また

  • コンソールに出力: ( System.out.println("var"))

また

于 2011-03-18T16:45:30.830 に答える
0

デバッガーであっても、実行時にローカル変数の値を読み取るのは簡単ではありません。クラスにデバッグシンボルがない場合、デバッガーを使用していても、ローカル変数を表示する方法はまったくありません。

値を確認するための最も簡単な解決策は、ログを使用して、System.out.println()またはログを使用して値を出力することです(slf4j)。

コードを変更せずに実行時にローカル変数を例証したい場合は、AOP(アスペクト指向プログラミング)を試すことができます。または、デバッガーが実行中のVMを調べるために使用するのと同じAPIを使用できます。

于 2011-03-18T16:49:00.347 に答える
0

「調べる」とはどういう意味ですか?オブジェクトの場合は System.out.println(yourvariable) または (yourvariable.toString()) を試してください。コンソールに表示されます。

于 2011-03-18T16:43:33.983 に答える