2010-07-20 21 views
32

Tutulması sırasında nesne değerinin yanında bir nesne kimliği görüntülenir Hata ayıklama sırasında. Örneğinjvm içinde Java nesne kimliği

: 28.332 oturum nesnenin kimliğidir. Bu kimlik ne karma kodu ne de System.identityHashCode. Nesnenin BU kimliği nasıl -

herkes bilir mi?

cevap

26

I nesne için benzersiz (ama başka şekilde anlamsız) tamsayıdır atama olarak, kendi içinde bir IdentityHashMap<Object, Integer> sahip tahmin. Bu tutulma hata ayıklayıcısına dahil olmalı (nesnelerin sahip olduğu özel bir kimlik değil), buna nasıl ulaşacağınızı mı soruyorsunuz?

Düzenleme: I (ben de Tutulma usta değilim unutmayın) böyle bir kesme noktası kurarsınız:

  • Ben bir başlangıç ​​kesme noktası olurdu (biri gibi ekran görüntüsü almak için kullanılan) ve ilgilendiğim nesnenin System.identityHashCode(object)'unu yazdırın.
  • Sonra koşul System.identityHashCode(object) == <whatever number you saw at the previous step> kullanarak bir kesme noktası yaratacak. Bunun yanlış nesnede durması çok nadir olurdu.

Yoksa içine ilgilenen nesne kullanabilirsiniz uygun toString() temsilini varsa, bunun yerine System.identityHashCode(object) o deneyebilirsiniz. Her durumda, iç nesne kimliğini tutmaya, ancak nesnenin kendisinden türeyebileceğiniz bir "id" (veya neredeyse) yakalamaya gerek yoktur.

+2

Genellikle - hata ayıklama uygulamasıdır ve işlem sırasında birkaç kez nesneler hakkında bilgi toplamak istiyorum - ara noktasında durmak ve işlevler aracılığıyla hangi nesnenin yoluna dair bilgi almak için ... – Gorbush

+3

+1 Bu doğrudur, sayıların, Eclipse hata ayıklayıcısı tarafından dahili olarak ayrılması ve izlenmesi, gerçek JVM nesne tanımlayıcılarından daha kolay okunması ve tanınması gibi görünmektedir. – skaffman

+1

Ben de onlar http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html#uniqueID%28 gelen düşünüyorum Eclipse hata ayıklayıcı tarafından% 29 uygulama gerçekten. – Redlab