我有一個方法,並希望檢查其中的變量,而無需調試 - 在Java中可能嗎?Java如何打印所有本地變量?
我不想寫這樣噸代碼:
System.out.println("a: " + a);
我想是這樣的:
System.out.printLocals();
而且它應該是巨大的,有這樣的:
System.out.printMembersOf(someObjectInstance);
我有一個方法,並希望檢查其中的變量,而無需調試 - 在Java中可能嗎?Java如何打印所有本地變量?
我不想寫這樣噸代碼:
System.out.println("a: " + a);
我想是這樣的:
System.out.printLocals();
而且它應該是巨大的,有這樣的:
System.out.printMembersOf(someObjectInstance);
「檢查」是什麼意思?如果它是一個對象,請嘗試一個System.out.println(yourvariable)或(yourvariable.toString())。它會在控制檯中顯示它。
您可以使用System.out.println
打印出變量。例如:
int i = 42;
System.out.println("i:" + i);
好了,你可以寫一個方法,用可變參數的參數,只是寫:
dump(variable1, variable2, variable3, variable4, ...);
它的效果並不理想,但它會在某些情況下是不夠的。沒有辦法自動獲取方法中的所有局部變量並轉儲它們。
你可能會考慮某種字節碼操作(例如BCEL),它可以做到這一點...但它會非常難看。
BCEL嗯,醜呃?我寧願使用dump(ar1,ar2m,..) – 2017-08-04 18:12:55
+1爲Log4j – smas 2011-03-18 18:02:27
在'jdb'上有'locals'。 – 2015-03-05 07:53:32
即使你是一個調試器,在運行時讀取局部變量的值也並不簡單。如果類中沒有調試符號,即使使用調試器,也無法查看局部變量。
查看值最簡單的解決方案是使用System.out.println()
或使用日誌記錄(slf4j)打印它們。
如果您想在運行時更改示例局部變量而不更改代碼,您可以嘗試AOP(面向方面的編程)。或者您可以使用相同的API that a debugger uses來檢查正在運行的VM。
我想有這樣的:
System.out.printLocals();
而且它應該是巨大的,有這樣的:
System.out.printMembersOf(someObjectInstance);
幾乎所有的Java類有一個toString
方法。你重寫這個方法,你可以得到一個表示你要求的字符串。
Eclipse Helios和其他IDE將爲您生成一個基本的toString
方法。
這種情況下不起作用:'public void foo(int k,String s){System.out.printLocals(); }'//預期的輸出與'System.out.ptintln(「k:」+ Integer.toString(k))相同; System.out.ptintln(「s:」+ s);' – denys 2011-03-23 12:44:29
@denys:你是對的。但是,沒有理由不能爲每個想要本地變量的方法編寫toLocalString方法。 – 2011-03-23 12:59:51
你在用什麼IDE? – gideon 2011-03-18 16:50:48
已經向所有成員詢問:http://stackoverflow.com/questions/1526826/printing-all-variables-value-from-a-class,讓我們繼續爲當地人。 – 2015-03-05 07:51:27