2015-01-24 10 views
11

Giả sử tôi có một lớpthiết lập một (phương pháp) breakpoint cho một đối tượng cụ thể (và không phải tất cả các trường hợp của kiểu đó) trong java

public class Foo 
{ 
    public void doThing() { ...} 
} 

Nói rằng tôi có một trường hợp rất nhiều Foo, nhưng tôi chỉ là đặc biệt quan tâm đến một trong số họ.

Làm cách nào để "gắn thẻ" trường hợp đó và đặt "điểm ngắt có điều kiện" trong doThings sẽ dừng CHỈ cho phiên bản được gắn thẻ? Có cách nào "xây dựng", đặc biệt là trình gỡ lỗi Eclipse, để thực hiện việc này không?

Hiện tại, tôi phải tạo cờ boolean theo cách thủ công trong lớp Foo đặt thành mặc định theo mặc định và tạo điểm ngắt có điều kiện dựa trên điểm đó trong doThings. Sau đó, khi tôi gặp phải đối tượng quan tâm, tôi sẽ đặt cờ thành true bằng cách thực thi mã setter trong cửa sổ Display.

Nhưng rõ ràng, điều đó đòi hỏi phải sửa đổi mã và thêm một số bản mẫu, không phải lúc nào cũng có thể hoặc một việc tốt để làm.

+2

Tôi không chắc chắn đó là những gì bạn đang hỏi, dù sao, tính năng này đã có sẵn trong thời gian dài. Bắt đầu gỡ lỗi và khi điểm dừng dừng trên đối tượng mong muốn của bạn, hãy nhấp vào "this" trong khung nhìn debug variables, sau đó "breakpoint instance"; bạn nhận được danh sách các trường hợp trực tiếp và bạn có thể chọn để hạn chế breakpoint –

+0

@guido Điều đó nghe giống như những gì anh ta yêu cầu với tôi. Bạn nên thêm đó làm câu trả lời. – erickson

+0

@erickson tôi không chắc chắn vì điều này chỉ hoạt động trong thời gian chạy sau khi bắt đầu các phiên gỡ lỗi và trường hợp đã có sẵn, có vẻ như anh ta muốn quyết định trường hợp nào trước đó, tại thời gian biên dịch –

Trả lời

8

Vâng, đó là dụ breakpoint trong Eclipse.

Bạn phải đặt một breakpoint phổ biến trong lớp mong muốn và, trong bảng điều khiển biến, bạn nhấp chuột phải vào các ví dụ và chọn Instance Breakpoints.

Instance Breakpoints

Một popup sẽ yêu cầu bạn mà breakpoint bạn muốn hoạt động ví dụ đó.

Popup Selection

Bạn chọn và hoàn tất!

Done

+0

Cảm ơn, tôi nghĩ rằng điều này là lừa! –

1

Tôi không biết cách nào "phù hợp", nhưng một cách tiếp cận sẽ là gọi hashCode() trong cửa sổ xem khi bạn tạo lần đầu tiên và sau đó thực hiện điểm ngắt có điều kiện trên hashCode(). Vì vậy, bạn cần phải thay đổi điểm ngắt mỗi khi bạn chạy nó - hơi khó chịu, nhưng ít nhất nó cũng cung cấp cho bạn một giá trị không đổi mà bạn có thể sử dụng để chỉ đối tượng. (Đó là giả định rằng lớp học không ghi đè lên hashCode(), tất nhiên - nếu bạn có nhiều trường hợp có cùng mã băm, điều đó làm cho mọi thứ phức tạp hơn.)

2

Không phải cách sạch nhất, nhưng bạn có thể đặt điểm ngắt có điều kiện mặc định Object#toString đầu ra của cá thể.

Sau khi nhận được mặc định toString() kết quả của ví dụ, thêm một cái gì đó như sau như một điều kiện breakpoint trong phương pháp doThing:

this.toString().equals("[email protected]") 
+0

Vâng, điều này phụ thuộc vào 'toString' KHÔNG bị quá tải. Nhưng cảm ơn, cho câu trả lời! –

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