Gỡ lỗi Eclipse bắt đầu với những gì được gọi là Đại lý.
JVM, chạy các nguồn ".class" được tuân thủ có tính năng cho phép các thư viện bên ngoài (viết bằng Java hoặc C++) được chèn vào JVM, trong thời gian chạy. Các thư viện bên ngoài này được gọi là Đại lý và chúng có khả năng sửa đổi nội dung của các tệp .class được chạy. Các đại lý này có quyền truy cập vào chức năng của JVM không thể truy cập từ bên trong một mã Java thông thường đang chạy bên trong JVM và chúng có thể được sử dụng để thực hiện các công cụ thú vị như tiêm và sửa đổi mã nguồn đang hoạt động, lược tả vv Một số công cụ như JRebel để thay thế mã nóng) sử dụng phần chức năng này để đạt được phép thuật của họ.
Và để vượt qua một Agent Lib để một JVM, bạn làm như vậy qua bắt đầu lên đối số, bằng cách sử dụng -
agentlib:libname[=options]
Chúng tôi đã thực sự đi qua một Agent Lib tên jdwp để JVM chạy Tomcat. Jdwp là một JVM cụ thể, tùy chọn thực hiện của JDWP (Java Debug Wire Protocol) được sử dụng để xác định truyền thông giữa một trình gỡ lỗi và một JVM đang chạy. Đó là triển khai, nếu hiện tại được cung cấp dưới dạng thư viện gốc của JVM dưới dạng jdwp.so hoặc jdwp.dll
Vì vậy, nó sẽ làm gì? Nói một cách đơn giản, tác nhân jdwp mà chúng ta truyền về cơ bản phục vụ chức năng là một liên kết giữa cá thể JVM đang chạy một ứng dụng và một Debugger (có thể được định vị từ xa hoặc cục bộ).Vì nó là một thư viện tác nhân, nó có khả năng chặn mã đang chạy, tạo một cầu nối giữa JVM và trình gỡ rối, và có chức năng của một trình gỡ lỗi được áp dụng trên JVM. Vì trong kiến trúc JVM, chức năng gỡ rối không được tìm thấy trong chính JVM nhưng được trừu tượng hóa thành các công cụ bên ngoài (được gọi là debuggers), các công cụ này có thể nằm trên máy cục bộ đang chạy JVM đang được gỡ rối hoặc chạy từ máy bên ngoài. Đây là kiến trúc mô-đun, ghép đôi, cho phép chúng ta có một JVM chạy trên một máy từ xa và sử dụng JDWP, có một trình gỡ rối từ xa có thể giao tiếp với nó.
Đó là cách trình gỡ lỗi Eclipse hoạt động trong ngắn hạn.
Nguồn
2016-01-12 19:33:04
Cảm ơn, là một giá trị đáng đọc. Chỉ cần quan tâm tôi sẽ cố gắng sử dụng thư viện jdi.jar để trực tiếp xem gỡ lỗi trong hành động. –
@manuel, nếu bạn có thời gian và kiên nhẫn, hãy xem mã nguồn của JSwat (http://code.google.com/p/jswat/). Nó được xây dựng trên nền tảng Netbeans, và phục vụ như một ứng dụng front-end như xa như JPDA là có liên quan. Tôi phải thừa nhận rằng bản thân tôi không xem xét các nguồn. –