2011-03-18 19 views
8

我有一個方法,並希望檢查其中的變量,而無需調試 - 在Java中可能嗎?Java如何打印所有本地變量?

我不想寫這樣噸代碼:

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

我想是這樣的:

System.out.printLocals(); 

而且它應該是巨大的,有這樣的:

System.out.printMembersOf(someObjectInstance); 
+0

你在用什麼IDE? – gideon 2011-03-18 16:50:48

+0

已經向所有成員詢問:http://stackoverflow.com/questions/1526826/printing-all-variables-value-from-a-class,讓我們繼續爲當地人。 – 2015-03-05 07:51:27

回答

0

「檢查」是什麼意思?如果它是一個對象,請嘗試一個System.out.println(yourvariable)或(yourvariable.toString())。它會在控制檯中顯示它。

1

您可以使用System.out.println打印出變量。例如:

int i = 42; 
System.out.println("i:" + i); 
3

好了,你可以寫一個方法,用可變參數的參數,只是寫:

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

它的效果並不理想,但它會在某些情況下是不夠的。沒有辦法自動獲取方法中的所有局部變量並轉儲它們。

你可能會考慮某種字節碼操作(例如BCEL),它可以做到這一點...但它會非常難看。

+0

BCEL嗯,醜呃?我寧願使用dump(ar1,ar2m,..) – 2017-08-04 18:12:55

0

即使你是一個調試器,在運行時讀取局部變量的值也並不簡單。如果類中沒有調試符號,即使使用調試器,也無法查看局部變量。

查看值最簡單的解決方案是使用System.out.println()或使用日誌記錄(slf4j)打印它們。

如果您想在運行時更改示例局部變量而不更改代碼,您可以嘗試AOP(面向方面​​的編程)。或者您可以使用相同的API that a debugger uses來檢查正在運行的VM。

3

我想有這樣的:System.out.printLocals();

而且它應該是巨大的,有這樣的:System.out.printMembersOf(someObjectInstance);

幾乎所有的Java類有一個toString方法。你重寫這個方法,你可以得到一個表示你要求的字符串。

Eclipse Helios和其他IDE將爲您生成一個基本的toString方法。

+0

這種情況下不起作用:'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

+0

@denys:你是對的。但是,沒有理由不能爲每個想要本地變量的方法編寫toLocalString方法。 – 2011-03-23 12:59:51