2017-07-08 58 views

回答

1

UR問題不是很清楚,我,但我猜ü意味着這樣的:

  • u必須包含在集合S的對象O,它包含多個對象
  • O爲在你的代碼中更新(即它的內部屬性發生變化)並且你想通過表達式視圖來關注這些變化,同時你可以通過代碼
  • 你也希望這樣的代碼行/方法不會發生到O的一條兩岸路徑

我不知道任何方式(內部eclipse goody),讓你通過它的eclipse調試ID或對象哈希引用'O。

但它可以做得相當簡單:只需要​​能夠通過調試器中選擇的當前幀的某些(冗長的)引用方式達到O來完成此操作。

最簡單的方法是添加一些額外的代碼來將O設置爲某種靜態var。 U可以在手動調試的同時分配靜態var,藉助於「顯示」視圖讓您執行Java代碼,該視圖在當前堆棧框架的上下文中運行。

步驟:

  1. 創建/類MyWatcher添加到我們的代碼基礎。
  2. 步驟通烏爾代碼(添加O到集時例如。在示例代碼,在第五符),其中u得到烏爾手柄O對
  3. 打開顯示視圖並添加以下行MyWatcher.watches.put("a", o)(取代的「o '由在烏爾斷點引用澳表達)
  4. 執行用Ctrl + U或直通上下文菜單
  5. 行添加這UR‘表達式’視圖:MyWatcher.watches.get("a")
  6. 現在ö將保持在任何時候都可見,例如。在下面的例子:即使妳在foo(),B/C的地圖持有O. AR裁判
public class MyCode { 

    public static void main(final String[] args) { 
    bar(); 
    foo(); 
    } 

    static void bar() { 
    final Set<Object> set = new HashSet<>(); 
    for (int i = 0; i < 10; i++) { 
     final List<Integer> o = Arrays.asList(i); 
     set.add(o); 
    } 

    } 

    static void foo() { 
    System.out.println("bar"); 
    } 
} 

public class MyWatcher { 
    public static final Map<String, Object> watches = new HashMap<>(); 
} 
-1

在你的MyObject類中添加一個toString()方法。 你可以通過Eclipse使用: 右鍵單擊(在MyObject中) - > Source - > Generate toString()。 現在您將能夠看到MyObject的內容而不是哈希ID。

+0

我的意思是使用散列或Eclipse的ID,以便能夠看到我對象都次,甚至在超出範圍時。我在代碼中的大HashSet中丟失了對象,然後引用對象在代碼中的某個地方得到更新,所以我希望使用其中一個ID來始終監視對象。 – user3499973

+0

OP的問題是關於調試,而不是'toString'。 –