2010-07-20 38 views
32

在eclipse中的對象值附近顯示對象標識時調試。jvm中的Java對象標識

例如:28332是會話對象的ID。 此ID既不是哈希碼也不是System.identityHashCode

有誰知道 - 如何獲取對象的這個ID?

回答

26

我假定它們內部的IdentityHashMap<Object, Integer>有,分配每個對象的唯一的(但無意義否則)整數。這應該是eclipse調試器的內部(不是對象具有的特殊ID),您是否在問如何解決這個問題?

編輯:我會設置一個斷點這樣的(請注意,我沒有很好地蝕精通):

  • 我將有一個初步的斷點(像一個你用來拍攝截圖),並打印我感興趣的對象的System.identityHashCode(object)
  • 然後,我會創建一個使用條件System.identityHashCode(object) == <whatever number you saw at the previous step>斷點。這種情況很少會停止在錯誤的對象上。

或者,如果你有興趣到對象具有適當toString()表示可以使用,你也可以嘗試,而不是System.identityHashCode(object)。在所有情況下,您不必依賴eclipse的內部對象id,而是捕獲可以從對象本身派生的「id」(或幾乎)。

+2

一般 - 我調試應用程序,並想在過程運行時收集一些信息,有關對象有時 - 停止在破發點,並獲得有關哪些對象的路徑信息通過函數調用... – Gorbush 2010-07-20 11:53:40

+3

+1我覺得這是正確的,這些數字似乎由Eclipse調試器在內部進行分配和跟蹤,比實際的JVM對象標識符更容易閱讀和識別。 – skaffman 2010-07-20 11:54:56

+1

我也覺得他們來自http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html#uniqueID%28確實由Eclipse調試器實現%29。 – Redlab 2010-07-20 12:03:57