2010-03-20 25 views
9

Cho đến nay tôi đã học về cách tạo kết xuất chuỗi và kết xuất vùng heap bằng cách sử dụng jstack và và jmap tương ứng.Tương đương khối lượng lõi cho Java

Tuy nhiên, jstack kết xuất chuỗi chỉ chứa các văn bản mô tả ngăn xếp trên mỗi chuỗi. Và mở heap dump (file .hprof) với Java VisualVM chỉ hiển thị các đối tượng được cấp phát trong heap.

Điều tôi thực sự muốn là có thể xem chồng, để chuyển sang khung ngăn xếp cụ thể và xem các biến cục bộ. Loại gỡ lỗi sau giết mổ này có thể được thực hiện bình thường với các công cụ như WinDbg, gdb và một tệp lõi (cho một chương trình C++ gốc.)

Tôi tự hỏi nếu tệp 'lõi' này có cho phép tôi gỡ lỗi không môi trường sống) tồn tại trong Java?

Trả lời

2

Tôi đã tìm thấy thông tin liên quan trong một số Sun forum và trong SO discussion: Tôi không có nhiều may mắn với nó, nhưng nó có thể hoạt động trong trường hợp của bạn.

Lưu ý: một số công cụ được đề cập là các công cụ Java, nhưng không được hỗ trợ và không có sẵn trên các phiên bản Windows của JDK.

+0

Cảm ơn. Tôi nghĩ 'jsadebugd' rất gần với những gì tôi đang tìm kiếm. – Gant

1

Tôi không nghĩ rằng cơ chế kết xuất như vậy tồn tại trong Java chuẩn.

5

Java thực hiện. Nếu bạn đang sử dụng máy ảo IBM, hãy sử dụng com.ibm.jvm.Dump.SystemDump() để tạo một bãi chứa có lập trình. Điều này có thể được gỡ rối bằng cách sử dụng trình gỡ lỗi. Tôi tin rằng "giết" ing quá trình Java của bạn nên tạo ra một hệ thống dump quá. Để sử dụng Unix kill -4 pid trong đó pid là id tiến trình và có thể được truy vấn bằng cách nhập vào top | grep java nếu bạn có một phiên bản VM đang chạy.

Bạn cũng có thể thêm -Xdump:system hoặc -Xdump:heap vv để dòng lệnh java của bạn để lọc các sự kiện và tạo bãi vào các sự kiện nhất định như VM Stop (-Xdump:system:events=vmstop), bộ sưu tập đầy đủ rác (-Xdump:system:events=fullgc) vv Lưu ý, tùy thuộc vào kích thước heap của bạn, tạo một bãi chứa trên một GC đầy đủ có thể không phải là một ý tưởng hay (tức là bạn có thể tạo 50 bãi chứa 20 giây nếu bạn tăng từ 4M lên khoảng 60M trong 20 giây) để bạn có thể thêm bộ đếm như -Xdump:system:events=fullgc,range=50..55. giữa rác thải đầy đủ từ 50 đến 55.

1

Một số hệ điều hành (ví dụ Solaris mdb hoặc gdb trên Linux) hỗ trợ bằng trình gỡ lỗi gốc thông thường trên tệp kết xuất, với một số hỗ trợ đặc biệt để hiển thị khung ngăn xếp Java. Nhưng điều này là khá hardcore và có lẽ không phải những gì bạn muốn, vì nó không được tích hợp tốt với Java Debugger.

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