2008-09-18 15 views
5

Có thể lấy một kết xuất chuỗi của một ứng dụng Java Web Start không? Và nếu vậy, làm thế nào?Làm cách nào để tạo một kết xuất chuỗi của ứng dụng Java Web Start

Sẽ rất tuyệt nếu có giải pháp đơn giản, điều này sẽ cho phép khách hàng không phải là nhà phát triển tạo ra một chuỗi kết xuất. Ngoài ra, có thể tạo một kết xuất chuỗi theo cách lập trình không?

Trong Java Web Start Console, tôi có thể nhận danh sách các luồng bằng cách nhấn 't' nhưng không bao gồm stacktraces.

Nếu câu trả lời yêu cầu một số phiên bản java nhất định, vui lòng nói như vậy.

Trả lời

6

Trong giao diện điều khiển, nhấn V chứ không phải T:

t: dump thread list 
v: dump thread stack 

này hoạt động dưới JDK6. Không biết về người khác.

Alternative, dưới JDK5 (và có thể sớm hơn), bạn có thể gửi một vết đống đầy đủ của tất cả các chủ đề để chuẩn ra:

Dưới Windows: loại ctrl-break trong giao diện điều khiển Java.

Trong Unix:kill -3 <java_process_id> (ví dụ: kill -3 5555). Điều này sẽ KHÔNG giết ứng dụng của bạn.

Một điều khác: Như những người khác nói, bạn có thể nhận các ngăn xếp theo chương trình thông qua lớp học Thread nhưng xem ra cho Thread.getAllStackTraces() trước JDK6 vì có rò rỉ bộ nhớ.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648

Kính trọng,

scotty

2

Hãy thử

StackTraceElement[] stack = Thread.currentThread().getStackTrace(); 

Sau đó, bạn có thể lặp qua các bộ sưu tập để thể hiện các yếu tố x đống đầu bạn quan tâm.

2

JDK gần đây (buồn bã không JRE) bao gồm các công cụ như jstack mà làm như vậy nhiều thứ. Các JVM từ phiên bản 5 bao gồm các phần mở rộng của JMX để lấy các bãi chứa chuỗi, các số liệu thống kê bộ nhớ và nhiều hơn nữa. Tất cả các ứng dụng java, bao gồm cả các ứng dụng khởi động web, đều có chức năng này.

Bạn cần cài đặt JDK hoặc viết ứng dụng khách JMX thực hiện tương tự. Hãy xem http://java.sun.com/javase/6/docs/technotes/guides/management/ để biết thêm thông tin.

0

Vì Java 5 bạn có phương thức getStackTrace() của lớp Thread. Đối với các phiên bản trước, bạn có thể làm:

Thread.currentThread().dumpStack(); 

này sẽ in stack trace để System.out

+0

Đó chỉ cung cấp cho các chủ đề hiện tại, không phải tất cả chủ đề. –

2

Kể từ 1.5, bạn có thể sử dụng Thread.getAllStackTraces() để có được một Map để lặp qua.

Đầu ra lý tưởng sẽ được tạo ra từ Ctrl- \ (hoặc Ctrl-Break hoặc tương tự), nhưng dường như không có cách nào để tạo tài liệu này. Nếu bạn sẵn sàng giới hạn mình với JVM của mặt trời (hoặc sử dụng sự phản chiếu tôi giả sử), bạn có thể đào một vòng quanh các gói sun.* và xem có điều gì thú vị xuất hiện không.