2009-04-15 34 views
29

Tôi đang sử dụng giao diện jdi để tạo trình gỡ lỗi và khi tôi sử dụng MethodEntryRequests để cho phép nhập phương thức truy tìm chương trình gỡ lỗi chậm lại theo hệ số hàng chục. Tôi đã đặt bộ lọc cho chuỗi chính và tạm ngưng chính sách cho SUSPEND_EVENT_THREAD. Classfilter bị giới hạn và nếu tôi in bất kỳ sự kiện nào nhận được, nó không hiển thị nhiều hơn vài chục trong số đó, vì vậy nó sẽ không nhận được quá nhiều. Tôi gỡ lỗi tại địa phương và có loại followind của dòng lệnh với các chương trình java sửa lỗi:Tại sao chương trình gỡ lỗi bị chậm lại quá nhiều khi sử dụng gỡ lỗi nhập phương thức?

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

+0

Câu hỏi hay. Tôi nhận thấy các điểm ngắt của phương thức làm chậm những điều đáng kể khi tôi gỡ lỗi các chương trình Java với Eclipse. Tôi hy vọng ai đó có câu trả lời! –

+0

Tình hình có được cải thiện trong các phiên bản java gần đây hay không? – WSS

Trả lời

30

Câu trả lời ngắn gọn là việc thực hiện chạy thông qua trình thông dịch khi các mục nhập phương thức được thiết lập. Tôi không nghĩ rằng có bất cứ điều gì xung quanh này ...

Trường hợp này được sử dụng cho tất cả các mã đang chạy trong chế độ gỡ lỗi nhưng it was enhanced in 1.4 ... bây giờ HotSpot hoạt động để gỡ lỗi 'tốc độ đầy đủ' ngoại trừ trường hợp các mục và lối ra của phương thức, các điểm quan sát và khi bước đơn hoặc trong các phương thức có chứa các điểm ngắt.

+1

Nó thực sự chỉ có ý nghĩa ... HotSpot thực hiện tất cả các loại điều tốt đẹp trong biên dịch mã để tăng tốc độ nó (bao gồm cả các phương pháp lót mà làm mờ ranh giới giữa các phương pháp liên quan). Ngày đầu đó, nó là thích nghi vì vậy giữa chạy như thế nào một phương pháp chạy có thể thay đổi. Chắc chắn không phải thứ bạn muốn xảy ra khi bạn đang ở giữa quá trình gỡ lỗi. – Ichorus

5

tôi sẽ giả định rằng debugger cần phải thức dậy cho mỗi cuộc gọi phương pháp để xem nếu nó phù hợp với một người (s) đã được chọn để phá vỡ. Bởi vì nó phải kiểm tra mọi lời gọi phương thức cho một trận đấu tiềm năng trước khi nó có thể thực hiện nó chậm hơn đáng kể so với khi nó không phải thực hiện tất cả các kiểm tra này.

9

2 lý do:

  1. nó có thêm kiểm tra trên tất cả các entry phương pháp (không có tùy chọn để tinh chỉnh chỉ là một số phương pháp)
  2. phương pháp nội tuyến trở nên bất khả thi (phương pháp quá nhỏ chạy 10-100x lần chậm hơn)

cùng với các trình đơn và ứng dụng .net

+1

Tại sao phương thức nội tuyến trở thành không thể? –

+4

Bởi vì phương thức nội tuyến có nghĩa là bạn không còn phương pháp đó nữa - toàn bộ nội dung của nó sẽ được INLINED ở tất cả các nơi mà từ đó nó gọi và không có lời gọi phương thức nào sẽ xảy ra. Nhưng trình gỡ rối cần phương pháp đó bởi vì nó là nơi nó diễn ra. – Mash

+0

Âm thanh hợp lệ nhưng không đủ mạnh với tôi. Phương pháp INLINED vẫn có thể được truy tìm bằng trình gỡ rối? Về mặt kỹ thuật nó nên biết phương pháp kèm theo nó đang được nội tuyến để? –

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