2016-09-23 17 views
12

Mã này là từ dự án của chúng tôi, mã sản xuất:Có lý do gì để ném 'Ngoại lệ' và bắt nó ngay lập tức không?

if (changedToNull) { 
    try { 
     throw new Exception(); 
    } catch (Exception e) { 
     log.debug("changedToNull", e); 
    } 
} 

Các nhà phát triển không làm việc với chúng tôi nữa.

Tại sao một người nào đó sẽ ném một số Exception và bắt trực tiếp và đăng nhập?

+8

Nó cho phép bạn lấy dấu vết ngăn xếp. – resueman

+0

Nếu đây là tất cả, thì nó không có ý nghĩa gì cả. Nếu có nhiều loại ngoại lệ bị ném do các quyết định kinh doanh phức tạp và được xử lý riêng biệt, điều đó có thể chấp nhận được. Nhưng việc kiểm soát dòng chảy chương trình tổng thể với các ngoại lệ không được coi là thực hành tốt nhất. – JuniorDev

+0

Để buộc trình gỡ lỗi phá vỡ hoặc để kiểm tra xem bộ nhớ khó chịu có bị lỗi hay không. –

Trả lời

23

Mục đích chính là để có được một cuộc gọi stack khi bạn nhập vào if khối này cho mục đích gỡ lỗi nhưng nó có thể được viết lại như sau:

if (changedToNull) { 
    log.debug("changedToNull", new Exception("changedToNull is true")); 
} 

Hãy nói rằng changedToNull không bao giờ được true và bạn muốn có được ngăn xếp cuộc gọi để hiểu nó xảy ra như thế nào, bạn có thể tiến hành theo cách này.


Tạo một chồng gọi là khá đắt tiền, do đó bạn nên chắc chắn rằng mức debug được kích hoạt bằng cách kiểm tra giá trị của isDebugEnabled() quá (giả định rằng bạn sử dụng log4j) như sau:

if (changedToNull && log.isDebugEnabled()) { 
    ... 
} 
-5

này trông giống như một đoạn mã vô dụng đối với tôi. Một số người đã đề cập đến nó sẽ cung cấp cho bạn một dấu vết ngăn xếp nhưng bởi vì nó chỉ tạo ra một ngoại lệ mới ngăn xếp theo dõi sẽ không cung cấp nhiều thông tin hữu ích (trừ khi trong trường hợp gỡ lỗi hiếm).

tôi sẽ sắp xếp lại mã để trông giống như vậy và tránh thậm chí ném ngoại lệ:

if (changedToNull) { 
    log.debug("changedToNull"); 
} 

Nếu nhà phát triển muốn nhìn vào mã (trong khi vẫn đang phát triển) sau đó họ lý tưởng nên sử dụng một IDE xây dựng trong công cụ gỡ lỗi.

Quy tắc chung của ngón tay cái là trừ khi mã có sử dụng trong sản xuất thì có thể cũng không có ở đó và thực tiễn không tốt để giữ nó ở đó. Điều này không bao gồm các bài kiểm tra của khóa học.

+1

Dấu vết ngăn xếp sẽ hữu ích như bất kỳ dấu vết nào khác. Nó sẽ hiển thị những người được gọi là mã trong câu hỏi. –

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