2012-01-15 12 views
6

Tôi đang tìm một API JDI có khả năng để tạm dừng JVM tại bất kỳ điểm tùy ý nào trong quá trình thực thi. Nhìn vào phương thức BreakPointRequest createBreakpointRequest cần một vị trí cụ thể. Có bất kỳ API nào khác không cần vị trí hoặc cách nào đó để có được Vị trí hiện tại có thể được chuyển qua để tạo điểm dừng hay không.JDI: Cách tạm dừng một ứng dụng Java (JVM) như trong trình gỡ rối

Tôi về cơ bản đang tìm cách đính kèm và tạm dừng ứng dụng, sau đó sử dụng tác nhân JVMTI để nhận cuộc gọi lại cho sự kiện BreakPoint để thực hiện xử lý tiếp. Cảm ơn

+0

Bạn muốn tạm dừng JVM hoặc ứng dụng? nếu tôi hiểu đúng, một jvm có thể lưu trữ nhiều ứng dụng. Nếu đó là Jvm, lớp Virtualmachine, phương thức xử lý có thể đáng để nghiên cứu cho req của bạn. – kosa

Trả lời

3

chỉ có ý nghĩa với một vị trí trong nguồn. Tùy ý tạm dừng ứng dụng của bạn có thể được thực hiện tốt nhất bằng cách đình chỉ tất cả các luồng hiện đang chạy trong JVM. Hãy xem SuspendThreadList() hoặc SuspendThread trong jvmti. Cơ chế này sẽ là 'tạm dừng' mà bạn đang tìm kiếm.

1

Nếu bạn muốn tự ý tạm dừng hoạt động jvm bằng JDI, bạn sẽ sử dụng phương thức suspend của giao diện VirtualMachine.

Tuy nhiên, điều này thực sự không cung cấp cho bạn nhiều về khả năng kết nối với đại lý jvmti; như câu trả lời khác chỉ ra, các jvmti có phương pháp riêng của mình để làm điều tương tự.

Nếu bạn đang tìm cách xác định số lần gọi lại tùy ý cho điểm ngắt, thay vì gọi đến một đại lý cụ thể, bạn có thể quan tâm đến jdiscript, một lớp tập lệnh xung quanh JDI. khá dễ dàng trong Java thẳng, thay vì phải thả vào C++.