IDE Android Studio: Phá vỡ ngoại lệ


138

Có vẻ như Android Studio của tôi không muốn phá vỡ bất kỳ ngoại lệ nào theo mặc định. Kích hoạt ngắt trên "Bất kỳ ngoại lệ" nào bắt đầu vi phạm trong các thư viện JDE thực tế. Có cách nào để buộc nó chỉ phá vỡ các ngoại lệ trong mã của tôi không?

Đến từ vũ trụ Visual Studio, tìm kiếm hành vi gỡ lỗi VS mặc định ở đây.

Câu trả lời:


206

Để phá vỡ mọi ngoại lệ, bị bắt hoặc bị bắt:

  1. Mở cửa sổ Breakpoint thông qua Run -> Xem Breakpoint .
  2. Hộp thoại Breakpoint xuất hiện. Trong khung bên trái, cuộn xuống phía dưới. Chọn bất kỳ ngoại lệ nào trong Điểm dừng ngoại lệ Java
  3. Với bất kỳ ngoại lệ nào được chọn, trên khung bên phải, định cấu hình như sau:
    • Tạm dừng: đã kiểm tra
    • Tất cả: đã chọn
    • Tình trạng: !(this instanceof java.lang.ClassNotFoundException)
    • Thông báo: cả ngoại lệ bị bắtngoại lệ không được chọn

Hộp thoại Breakpoint

  1. Xác định các bộ lọc chỉ định không gian tên của các thư viện mà trình gỡ lỗi sẽ ngắt: Kiểm tra hộp kiểm Bộ lọc lớp để bật lọc lớp ( như được đề cập bởi @Scott Barta ). Sau đó nhấp vào nút ... (elipsis) để mở hộp thoại Bộ lọc lớp. Chỉ định các mẫu không gian tên lớp bằng cách nhấp vào nút Thêm mẫu(Thêm mẫu). Đi vào:
    • com.myapp.* (thay thế bằng tiền tố không gian tên của ứng dụng của bạn)
    • java.* (lưu ý: theo câu hỏi của OP, hãy bỏ qua phần này để KHÔNG vi phạm trên các thư viện Java)
    • android.* (như trên, bỏ qua để chỉ gỡ lỗi mã ứng dụng riêng)
    • Thêm bất kỳ không gian tên bổ sung nào nếu cần (ví dụ: thư viện của bên thứ 3)

Bộ lọc lớp

  1. Nhấn OK , sau đó bỏ qua hộp thoại Breakpoint.

6
@AndroidDev Đây không phải là giao diện đẹp nhất, đặc biệt là khi sử dụng Visual Studio IDE. Các bộ lọc lớp là để ngăn chặn tất cả các loại lỗi cấp thấp dừng ứng dụng thường xuyên hơn (đặc biệt là trong quá trình khởi tạo ứng dụng). Ví dụ, làm theo các bước ở trên, nhưng không có bộ lọc lớp, sau đó khởi động ứng dụng ở chế độ gỡ lỗi và xem điều gì sẽ xảy ra.
CJBS

6
@AndroidDev: Tôi nghĩ rằng nó thực sự có ý nghĩa. Theo mặc định, nó không phá vỡ tất cả các ngoại lệ. Bạn không phải đặt điều kiện và bộ lọc. Tuy nhiên, OP đã yêu cầu cụ thể để lọc các ngoại lệ (ngoại lệ trong mã riêng của mình).
Vịt Mooing

4
Là nhà phát triển xcode / iOS và android-n00b, tôi không biết rằng để BẤT K break điểm dừng nào, trong studio Android, bạn không thể nhấp vào biểu tượng play-like (tam giác) để khởi động ứng dụng. Bạn phải khởi động ứng dụng bằng cách nhấp vào biểu tượng giống lỗi bên cạnh ứng dụng bên phải.
xaphod

@xaphod Một cách khác là chạy trong chế độ phát hành (nhấn nút phát), sau đó khi ứng dụng đã khởi động, hãy đính kèm trình gỡ lỗi (bằng cách nhấn thiết bị có lỗi - hình chữ nhật dọc có lỗi màu xanh lá cây ở phía dưới bên phải của biểu tượng), sau đó chọn quá trình được gỡ lỗi. Điều này nhanh hơn nhiều nếu không gỡ lỗi bất kỳ mã khởi động ứng dụng nào. Xem: developer.android.com/tools/debugging/ từ
CJBS

Nếu bạn đang sử dụng Junit (gỡ lỗi trong khi kiểm tra đơn vị), bạn có thể muốn thêm bộ lọc lớporg.junit.*
Thomas Vincent

34

Nếu bạn mở cửa sổ Breakpoint, nó cung cấp cho bạn khá nhiều tùy chọn để có nó có điều kiện phá vỡ hay không. Cái bạn đang tìm kiếm là "Bộ lọc lớp" ở đây - bạn có thể chỉ định biểu thức ký tự đại diện, ví dụ như đường dẫn gói Java và nó sẽ chỉ phá vỡ các ngoại lệ được tạo từ các lớp phù hợp.


4
Đối với bất kỳ ai đang tìm kiếm cửa sổ Breakpoint, nó có thể được tìm thấy trong menu, Run -> Xem Breakpoint.
Patrick

2
Tôi đang thử cái này, nhưng không thể làm cho nó hoạt động được. Bộ lọc lớp nên là gì? Có thể cho một số ví dụ?
Bart Friederichs

1
Tôi đang ở trong cùng một chiếc thuyền - các bộ lọc lớp dường như không hoạt động đối với tôi. Tôi đã thử com.mycompany. * Nhưng không có trường hợp ngoại lệ nào khiến nó bị hỏng.
Kylotan 18/03/2015

Nó chỉ dừng lại ở ZygoteInit.java mọi lúc! Khá vô dụng! Làm thế nào để khắc phục điều đó ???
Renaud Cerrato

Chạy-> Xem Breakpoint .... yeah, chúng tôi sẽ không muốn một cửa sổ được hiển thị trong menu "View", phải không!
LarryBud

7

Để phá vỡ tất cả các ngoại lệ trong mã của bạn và các ngoại lệ khác nếu chưa được phát hiện:

Phương pháp này lọc ra các loại ngoại lệ mà bộ thực thi ném trong khi hoạt động bình thường (không phải là rất đặc biệt, phải không?). Nó không sử dụng bộ lọc lớp, vì nó sẽ lọc quá nhiều; lỗi trong mã của bạn thường khiến các lớp thời gian chạy ném ngoại lệ (ví dụ: truy cập danh sách mảng qua cuối).

  1. Enable Java breakpoint ngoại lệ / Bất kỳ ngoại lệ cho uncaught chỉ ngoại lệ.

  2. Thêm một Điểm dừng ngoại lệ Java mới cho Exception (java.lang)lớp cho các trường hợp ngoại lệ bị bắt và không bị bắt . Kích hoạt Điều kiện và đặt thành điều này:

        !(this instanceof java.lang.ClassNotFoundException || this instanceof android.system.ErrnoException || this instanceof java.io.FileNotFoundException || this instanceof javax.net.ssl.SSLHandshakeException || this instanceof javax.net.ssl.SSLPeerUnverifiedException || this instanceof android.system.GaiException || this instanceof java.net.SocketTimeoutException || this instanceof java.net.SocketException || this instanceof java.security.NoSuchAlgorithmException)
    

Thêm vào danh sách loại trừ trong điều kiện bất kỳ trường hợp ngoại lệ không ngoại lệ nào khác mà bạn gặp phải. (BTW, sử dụng java.lang.Exceptionlà một cách hiệu quả để có mục nhập "Bất kỳ ngoại lệ" thứ hai.)


! không tốt hơn để sử dụng (một || b || c) thay vì (a) && (b) && (c)!
ceph3us
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.