I have a method and want to examine variables inside it without debugging - is it possible in Java?
I do not want to write tons of code like:
System.out.println("a: " + a);
I want to something like:
System.out.printLocals();
Also it should be great to have something like:
System.out.printMembersOf(someObjectInstance);
-
All members has been asked at: stackoverflow.com/questions/1526826/…, let's keep this just for locals.Ciro Santilli OurBigBook.com– Ciro Santilli OurBigBook.com2015年03月05日 07:51:27 +00:00Commented Mar 5, 2015 at 7:51
6 Answers 6
Well, you can write a method with a varargs parameter and just write:
dump(variable1, variable2, variable3, variable4, ...);
It's not ideal, but it will be enough in some circumstances. There's no way to automatically grab all the local variables from a method and dump them though.
You might consider some sort of bytecode manipulation (e.g. with BCEL) which could do it... but it would be pretty ugly.
-
BCEL hmm, ugly eh? I'd rather use dump(ar1, ar2m,..)Anurag Awasthi– Anurag Awasthi2017年08月04日 18:12:55 +00:00Commented Aug 4, 2017 at 18:12
I want to have something like:
System.out.printLocals();
Also it should be great to have something like:
System.out.printMembersOf(someObjectInstance);
Just about every Java class has a toString
method. You override that method, and you can get a string that represents what you're asking for.
Eclipse Helios, among other IDEs, will generate a basic toString
method for you.
-
this will not work for case:
public void foo(int k, String s) { System.out.printLocals(); }
// expected output is the same as forSystem.out.ptintln("k: " + Integer.toString(k)); System.out.ptintln("s: " + s);
denys– denys2011年03月23日 12:44:29 +00:00Commented Mar 23, 2011 at 12:44 -
@denys: You're correct. However, there's no reason you couldn't code a toLocalString method for each of the methods you wanted local variables.Gilbert Le Blanc– Gilbert Le Blanc2011年03月23日 12:59:51 +00:00Commented Mar 23, 2011 at 12:59
You can use System.out.println
to print out variables. Example:
int i = 42;
System.out.println("i:" + i);
- Just print them out to the debugger. (Debugging with Eclipse)
OR
- Print out to the console: (
System.out.println("var")
)
OR
-
On
jdb
there islocals
.Ciro Santilli OurBigBook.com– Ciro Santilli OurBigBook.com2015年03月05日 07:53:32 +00:00Commented Mar 5, 2015 at 7:53
What do you mean by "examining" ? Try a System.out.println(yourvariable), or (yourvariable.toString()) if it's an object. It'll display it in the console.
It's not simple to read the values of local variables at runtime, even if you're a debugger. If there are no debug symbols in your class, there is no way at all to see local variables, even if you use a debugger.
The most simple solution to see the values is printing them with System.out.println()
or to use logging (slf4j).
If you want to example local variables at runtime without changing the code, you can try AOP (Aspect-oriented programming). Or you can use the same API that a debugger uses to examine the running VM.