2010-07-20 11 views
32

Identyfikator obiektu jest wyświetlany w pobliżu wartości obiektu w czasie zaćmienia Podczas debugowania.Identyfikator obiektu Java w jvm

Na przykład: 28332 to identyfikator obiektu sesji. Ten identyfikator nie jest ani kodem mieszającym, ani System.identityHashCode.

Czy ktoś wie - jak zdobyć TEN identyfikator obiektu?

Odpowiedz

26

Zakładam, że mają wewnętrznie IdentityHashMap<Object, Integer>, przypisując unikalną (ale nie mającą znaczenia w inny sposób) liczbę całkowitą na obiekt. To powinno być wewnętrzne dla debuggera zaćmienia (nie jest to specjalny identyfikator, który mają obiekty), czy pytasz, jak się do tego dostać?

Edit: Chciałbym założyć breakpoint tak (uwaga nie jestem dobrze zorientowany w Eclipse):

  • musiałbym początkowy przerwania (jak ten użyty do podjęcia zrzut ekranu) i wydrukuj obiekt System.identityHashCode(object) obiektu, który mnie interesuje.
  • Następnie utworzyłbym punkt przerwania przy użyciu warunku System.identityHashCode(object) == <whatever number you saw at the previous step>. Byłoby bardzo rzadkie, aby zatrzymać się na niewłaściwym obiekcie.

Albo jeśli obiekt jesteś zainteresowany w posiada odpowiedni toString() reprezentację można użyć, można również spróbować, że zamiast System.identityHashCode(object). We wszystkich przypadkach nie trzeba polegać na "wewnętrznym id obiektu", ale uchwycić taki "identyfikator" (lub prawie), który można uzyskać z samego obiektu.

+2

Generalnie - debuguję aplikację i chciałbym zebrać informacje o obiektach podczas uruchamiania procesu - aby zatrzymać się w punkcie przerwania i uzyskać informacje o ścieżce obiektu przez wywołanie funkcji ... – Gorbush

+3

+1 Myślę to prawda, liczby wydają się być przydzielane i śledzone wewnętrznie przez debugger Eclipse, łatwiejsze do odczytania i rozpoznania niż rzeczywiste identyfikatory obiektów JVM. – skaffman

+1

Też myślę, że pochodzą z http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html#uniqueID%28 % 29 implementacja przez Eclipse debugger. – Redlab

Powiązane problemy