2016-09-23 19 views
12

इस कोड में हमारी परियोजना, उत्पादन कोड से है।क्या 'अपवाद' फेंकने और इसे तुरंत पकड़ने का कोई कारण है?</p> <pre><code>if (changedToNull) { try { throw new Exception(); } catch (Exception e) { log.debug("changedToNull", e); } } </code></pre> <p>डेवलपर किसी भी अधिक हमारे साथ काम नहीं करता है:

क्यों किसी को एक Exception फेंक और सीधे पकड़ने और यह लॉग इन करेगा?

+8

यह आपको स्टैक ट्रेस प्राप्त करने देता है। – resueman

+0

यदि यह सब कुछ है, तो यह कोई समझ नहीं आता है। यदि जटिल व्यावसायिक निर्णयों के परिणामस्वरूप कई अपवाद प्रकार फेंक दिए गए थे और अलग-अलग संभाले गए थे, तो यह स्वीकार्य हो सकता है। लेकिन अपवादों के साथ समग्र नियंत्रण कार्यक्रम प्रवाह को सबसे अच्छा अभ्यास नहीं माना जाता है। – JuniorDev

+0

डीबगर को तोड़ने के लिए मजबूर करने के लिए या जांचने के लिए कि क्या स्मृति स्मृति त्रुटि-हैंडलिंग के लिए है। –

उत्तर

23

मुख्य उद्देश्य है जब आप उद्देश्य डीबगिंग के लिए इस if ब्लॉक में दर्ज एक कॉल स्टैक प्राप्त करने के लिए है, लेकिन यह अगले के रूप में लिखा जा सकता है:

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

मान लें कि changedToNulltrue कभी नहीं होना चाहिए है और आपके पास करना चाहते हैं यह समझने के लिए कॉल स्टैक प्राप्त करें कि यह कैसा हुआ, आप इस तरह आगे बढ़ सकते हैं।


एक कॉल स्टैक बनाना काफी महंगा है ताकि आप isDebugEnabled() का मूल्य जाँच भी (यह मानते हुए कि आप log4j का उपयोग करें) अगले के रूप में द्वारा सुनिश्चित करना चाहिये कि debug स्तर सक्षम है:

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

यह मुझे एक बेकार कोड की तरह दिखता है। कुछ लोगों ने उल्लेख किया है कि यह आपको एक स्टैक ट्रेस देगा लेकिन क्योंकि यह सिर्फ एक नया अपवाद बना रहा है क्योंकि स्टैक ट्रेस बहुत उपयोगी जानकारी प्रदान नहीं करेगा (जब तक दुर्लभ डीबगिंग मामलों में नहीं)।

मैं बहुत की तरह लग रहे और यहां तक ​​कि अपवाद फेंकने से बचने के लिए कोड को पुनर्व्यवस्थित होगा:

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

डेवलपर्स कोड की जांच के लिए (जबकि अभी भी विकास में) तो वे आदर्श एक IDE में बनाया का उपयोग करना चाहिए चाहते हैं डीबग उपकरण।

अंगूठे का एक सामान्य नियम तब तक है जब तक कोड का उत्पादन में उपयोग न हो, तब भी यह वहां न हो और यह वहां रखने के लिए कुछ हद तक खराब अभ्यास हो। इसमें पाठ्यक्रम के परीक्षण शामिल नहीं हैं।

+1

स्टैक ट्रेस किसी अन्य के रूप में उपयोगी होगा। यह दिखाएगा कि प्रश्न में कोड किसने बुलाया। –

संबंधित मुद्दे