Có phải Break Break trên Exception Ex trong IntelliJ?


318

Có tính năng nào sẽ tự động phá vỡ gỡ lỗi trong lần xuất hiện ngoại lệ đầu tiên không?

Vì vậy, chúng tôi

  1. bắt đầu ứng dụng
  2. làm một cái gì đó ném ngoại lệ
  3. IntelliJ xuất hiện dòng tô sáng nơi xảy ra ngoại lệ.

Bạn có thể muốn phá vỡ các ngoại lệ chưa được chỉ, phải không?
David Ferenczy Rogožan

Câu trả lời:


367

Chạy | Xem điểm dừng | Điểm dừng ngoại lệ


Thật không may, tôi đã thấy rằng trong thực tế (với dữ liệu lớn), các biến khung mà bạn quan tâm không phải lúc nào cũng tải.
information_interchange

158

Một cách nhanh chóng để bật lên hộp thoại là nhấn Ctrl+ SHIFT+ F8(Trên máy Mac: Cmd+ SHIFT+ F8), sau đó nhấp vào tab điểm dừng ngoại lệ. Nếu đó là tab cuối cùng bạn đang xem, nó vẫn sẽ được chọn, giúp bạn dễ dàng phá vỡ các ngoại lệ trên và tắt.

Điều này sẽ khiến IntelliJ phá vỡ tại điểm trong mã (hoặc mã thư viện) nơi ngoại lệ được nêu ra. Cụ thể, bạn có được 'cơ hội đầu tiên' khi xử lý ngoại lệ, trước khi ngăn xếp được tìm kiếm các khối bắt / cuối cùng để thực thi.


MIPO: Java có xu hướng ném rất nhiều ngoại lệ trong nội bộ khi tải các lớp, do đó, việc phá vỡ tất cả các ngoại lệ này có thể trở nên khá tẻ nhạt. Tin tốt là bạn có thể loại trừ một số loại ngoại lệ nhất định bằng cách sử dụng trường điều kiện .

Ví dụ:

!(this instanceof java.lang.ClassNotFoundException)

Bạn có thể xâu chuỗi nhiều điều kiện như vậy cùng với &&.

nhập mô tả hình ảnh ở đây


9
Có cách nào để nói "chỉ phá vỡ các ngoại lệ từ dự án của tôi (không phải từ hệ thống Java)" không?
Rau chết tiệt

16
Đừng quên "Đã tắt cho đến khi điểm dừng được chọn:" - điểm này thật tuyệt vời. Chỉ cần đặt một điểm dừng trong mã của bạn sau khi tất cả các thư viện Java hoặc các thư viện khác đã được tải và thiết lập. Sau đó chọn điểm dừng của bạn từ danh sách thả xuống và chờ đợi. Điểm dừng của bạn sẽ bị tấn công và sau đó khi bạn tiếp tục nhấn, bộ lọc Ngoại lệ Caught & Uncaught mới của bạn sẽ hoạt động. :)
Louis St-Amour

1
Đừng quên kiểm tra cả "Ngoại lệ bị bắt" và "Không ngoại lệ" ở cuối hộp thoại Breakpoint.
Robino

59

Trong IntelliJ IDEA 14 đi đến:

Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"

Nếu bạn không bỏ chọn, Caught Exceptionsviệc thực thi sẽ bị dừng mỗi lần Java Frameworkném ngoại lệ bên trong.


1
Chạy -> Xem Điểm dừng ... -> Kiểm tra "Điểm dừng ngoại lệ Java" -> Bỏ chọn "Ngoại lệ bị bắt"
Jonas

2
Thật không may, điều này vẫn phá vỡ các ngoại lệ bị bắt đối với tôi, ngay cả sau khi vô hiệu hóa "ngoại lệ bị bắt".
Carcigenicate

Đây là thông tin rất quan trọng tôi sẽ nói, nếu không, nó là một địa ngục ngoại lệ không có giá trị thông tin. Chủ yếu khi sử dụng các khung lớn như Grails.
David Ferenczy Rogožan

OK, tôi đã thay đổi quyết định - cả hai tùy chọn, có và không có ngoại lệ bị bắt đều xấu, bởi vì thông thường, trong một ứng dụng web thông thường, tất cả các ngoại lệ đều được sử dụng, có một khối bắt cấp cao bắt mọi thứ và định dạng nó trình bày cho người dùng. Vì vậy, không có ngoại lệ bị bắt, nó không vi phạm bất cứ điều gì, với chúng, nó phá vỡ hàng trăm lần trong một yêu cầu. Cả hai đều vô dụng :(
David Ferenczy Rogožan

Không có gì là vô ích, nếu bạn biết cách sử dụng nó.
Alessandro Flati

12

Có, có. Bạn cần xác định điểm dừng ngoại lệ (có thể là "Bất kỳ ngoại lệ nào") trong hộp thoại điểm dừng trong IntelliJ IDEA.

Các ngoại lệ có thể được lọc theo điều kiện hoặc lớp nếu muốn hoặc bằng cách bạn quan tâm đến các ngoại lệ bị bắt hoặc không bị bắt.


7

Nếu bạn nhấp vào dấu "+" nhỏ ở góc trên bên trái, bạn có thể thêm một điểm dừng mới. Nếu bạn chọn Điểm dừng ngoại lệ, bạn sẽ nhận được một hộp thoại nhỏ nơi bạn có thể nhập lớp ngoại lệ để ngắt (trong trường hợp bạn không muốn phá vỡ tất cả các ngoại lệ).


0

Trong các phiên bản mới hơn trên intellij trong phần Run > View Breakpoint .

Sau đó kiểm tra Điểm dừng ngoại lệ Java -> Bất kỳ ngoại lệ nào .

Một cách tốt để gỡ lỗi các ngoại lệ là sử dụng gói ứng dụng chính của bạn và thẻ đại diện .*. Bằng cách này, bạn bỏ qua tất cả các ngoại lệ của các thư viện khác, vì hầu hết các lần bạn đang tìm kiếm các ngoại lệ được ném bởi ứng dụng của bạn chứ không phải bởi bất kỳ thư viện nào khác (có thể là rất nhiều ngoại lệ).

Như một ví dụ cho thấy trong hình ảnh tôi sử dụng com.gs.mercury.*để phá vỡ mỗi khi ứng dụng ném ngoại lệ. Nếu bạn sử dụng ngoại lệ cho những gì họ làm (để xử lý các trường hợp ngoại lệ và không xử lý luồng tình huống thông thường), bạn sẽ chỉ dừng lại khi bạn đạt được ngoại lệ mong muốn gần như mọi lúc.

PD. câu trả lời được thêm vào chỉ để chỉ ra bộ lọc lớp Catch khá hữu ích .

Điểm dừng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.