2010-07-20 38 views
32

Có một ID đối tượng được hiển thị gần giá trị đối tượng trong nhật thực Trong khi gỡ lỗi.ID đối tượng Java trong jvm

Ví dụ: 28332 là ID của đối tượng phiên. Id này không phải là mã băm cũng không phải là System.identityHashCode.

Có ai biết - làm thế nào để có được id này của đối tượng?

Trả lời

26

Tôi giả sử họ có nội bộ là IdentityHashMap<Object, Integer>, gán một số nguyên duy nhất (nhưng vô nghĩa khác) cho mỗi đối tượng. Điều này nên được nội bộ để gỡ lỗi nhật thực (không phải là một id đặc biệt mà các đối tượng có), là bạn yêu cầu làm thế nào để có được điều đó?

Sửa: Tôi sẽ thiết lập một breakpoint như thế này (lưu ý tôi không thành thạo trong nhật thực):

  • tôi sẽ có một breakpoint ban đầu (như một trong những bạn sử dụng để chụp ảnh chụp màn hình) và in các System.identityHashCode(object) của đối tượng mà tôi quan tâm.
  • Sau đó, tôi sẽ tạo điểm ngắt bằng cách sử dụng điều kiện System.identityHashCode(object) == <whatever number you saw at the previous step>. Sẽ rất hiếm khi điều này dừng lại ở đối tượng sai.

Hoặc nếu đối tượng bạn quan tâm có đại diện thích hợp toString() bạn có thể sử dụng, bạn cũng có thể thử thay vì System.identityHashCode(object). Trong mọi trường hợp, bạn không phải phụ thuộc vào id đối tượng nội bộ nhật thực, nhưng nắm bắt một "id" (hoặc gần như) mà bạn có thể lấy được từ chính đối tượng đó.

+2

Nói chung - tôi đang gỡ lỗi ứng dụng và muốn thu thập một số thông tin về các đối tượng một số lần trong quá trình chạy - để dừng tại điểm ngắt và nhận thông tin về đường dẫn của đối tượng thông qua các cuộc gọi ... – Gorbush

+3

+1 Tôi nghĩ điều này là đúng, các con số dường như được cấp phát và theo dõi nội bộ bởi trình gỡ rối Eclipse, dễ đọc và nhận biết hơn so với các mã định danh đối tượng JVM thực tế. – skaffman

+1

Tôi cũng nghĩ rằng chúng đến từ http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html#uniqueID%28 Thực hiện% 29 bởi trình gỡ lỗi Eclipse thực sự. – Redlab

Các vấn đề liên quan