2010-01-22 30 views
5

Có thể đặt điểm ngắt để chương trình ngừng thực hiện sau khi lệnh đã thực hiện một số điều kiện nhất định true?Điểm ngắt điều kiện phụ thuộc dòng không

Một lớp học có một biến có tên là currency và tôi muốn tạo điểm ngắt để làm cho chương trình dừng tại bất kỳ dòng nào sau currency == 20. Tôi không biết số dòng nơi currency bị thay đổi, do đó, điều này giống như đặt điểm ngắt trong mỗi dòng của lớp học của tôi [ed. nơi currency bị thay đổi].

Có cách nào để thực hiện điều đó (ngoài việc thêm điểm ngắt tại mỗi dòng) không?

Tôi đang sử dụng NetBeans, nhưng một giải pháp trong bất kỳ IDE nào khác đều được chào đón.

+0

Trình gỡ lỗi cũ hơn mà tôi đã sử dụng được gọi là 'đồng hồ' này. Bạn có thể thử tìm kiếm điều đó không? –

Trả lời

3

Dưới đây là một liên kết trên thiết breakpoint có điều kiện trong NetBeans: http://www.java-hair.com/?p=61

Các văn bản có liên quan:

Trong NetBeans, tạo một breakpoint, các nhấp chuột phải vào hình vuông nhỏ màu hồng mà biểu thị phá vỡ. Nhấp vào “Tùy chỉnh”. Khi hộp thoại tùy chỉnh xuất hiện, hãy kiểm tra "Điều kiện" và điền trong điều kiện. Trên đây là ví dụ của hộp thoại này trong NetBeans.

Chúng cũng bao gồm Eclipse và JDeveloper.

Chỉnh sửa: để trả lời nhận xét của bạn - không, điều này không thể thực hiện theo cách bạn muốn. Cách một trình gỡ rối đặt một điểm ngắt là bằng cách thay đổi một byte trong lệnh mà tại đó điểm ngắt được đặt. Khi lệnh được đánh giá, sự hiện diện của byte đó chuyển điều khiển đến trình gỡ lỗi, người thay thế byte bằng bất kỳ thứ gì đã có trước đó. Khi thực hiện được tiếp tục, trình gỡ rối di chuyển con trỏ chỉ dẫn đến lệnh mà điểm ngắt được thiết lập. Một điểm ngắt có điều kiện trên một dòng là dễ thực hiện - khi điều khiển chuyển đến trình gỡ lỗi, anh ta chỉ cần kiểm tra điều kiện và nếu điều đó không đúng thì anh ta sẽ tự động thực hiện lại.

Vì vậy, nó sẽ hoạt động như thế nào nếu bạn không phải đính kèm điểm ngắt có điều kiện vào một dòng? Nó sẽ phải được gắn vào mỗi dòng (giống như bạn phỏng đoán bạn sẽ cần phải làm để đạt được hiệu ứng này nếu không). Tôi đã không có nhu cầu để làm điều này, nhưng tôi tưởng tượng nó sẽ là không mong muốn vì nó sẽ làm chậm chương trình thực hiện đáng kể. Một cách tiếp cận tốt hơn có thể là sử dụng IDE của bạn để tìm kiếm thông qua mã cho tất cả các trường hợp tiền tệ để xem nơi nó có thể được đặt, và đặt các điểm ngắt có điều kiện xung quanh đó.

+0

Nhưng điều đó sẽ đặt điểm ngắt * chỉ * cho dòng cụ thể, tôi cần một điểm ngắt có điều kiện cho "tất cả các dòng". Đọc lần thứ hai của bản sao kê ban đầu của tôi có thể làm rõ mọi thứ – xtracto

0

Điều này có thể ở cả Intellj IDEA và Eclipse, cùng với các loại điểm ngắt kết nối khác. Chức năng này là một chức năng của IDE của bạn chứ không phải JVM.

0

Trong Eclipse, bạn có thể đặt điểm ngắt có điều kiện để kiểm tra khi biến được thay đổi.

Nó không phải là có thể cho điều kiện chung, tuy nhiên, để được chia "khoảnh khắc rất có điều kiện phức tạp này trở thành sự thật"

3

Thay đổi cách bạn viết phần mềm.

Thay vì:

public class BreakEncapsulation { 
    private float currency = 0.0; 

    public BreakEncapsluation() { 
    this.currency += 5; 
    } 

    public void updateCurrency() { 
    this.currency = 20.0; 
    } 

    public void increaseCurrencyByRate() { 
    this.currency += 2; 
    } 

    public void decreaseCurrencyByRate() { 
    this.currency -= 2; 
    } 
} 

Làm điều này:

public class HonourEncapsulation { 
    private float currency; 

    public HonourEncapsluation() { 
    setCurrency(getCurrency() + 5); 
    } 

    public void updateCurrency() { 
    setCurrency(20.0); 
    } 

    public void increaseCurrencyByRate() { 
    setCurrency(getCurrency() + getRate()); 
    } 

    public void decreaseCurrencyByRate() { 
    setCurrency(getCurrency() - getRate()); 
    } 

    public void setCurrency(float currency) { 
    System.out.println("Old currency = " + this.currency); 

    // Set the break point here. This is the only spot in the entire system 
    // where the value of currency changes. This idea follows the DRY 
    // principle: every piece of information should have exactly one 
    // occurrence. 
    // 
    this.currency = currency; 

    System.out.println("New currency = " + this.currency); 
    } 

    private float getCurrency() { return this.currency; } 

    private float getRate() { return 2.0; } 
} 

Không chỉ trợ giúp này với việc duy trì mã của bạn (không trùng lặp code), nó giữ một thế giới của những khả năng mở. Nó có thể không giúp bạn với vấn đề hiện tại của bạn, nhưng nó sẽ giúp bạn tránh được một số vấn đề trong tương lai.

Đây là kỹ thuật được gọi là đóng gói và có liên quan chặt chẽ đến việc ẩn thông tin ẩn.

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