मेरे पास एक बहुत ही विस्तार से लॉगिंग कार्यक्षमता के साथ (विजुअल) सी ++ में लिखी गई एक विंडोज सेवा है जिसने अक्सर मुझे कभी-कभी त्रुटियों का कारण खोजने में मदद की है। असल में मैं प्रत्येक वापसी मूल्य की जांच करता हूं और लॉग ऑन करता हूं कि कहां चल रहा है और कहां से त्रुटियां आ रही हैं।सी ++: क्या मुझे सभी अपवादों को पकड़ना चाहिए या प्रोग्राम को क्रैश करना चाहिए?
आदर्श रूप में, मैं अपवादों में विस्तृत दृश्यता का एक समान स्तर (जैसे सीमा से बाहर सरणी, शून्य से विभाजन, और इसी तरह) होना चाहता हूं। दूसरे शब्दों में: मैं जानना चाहता हूं कि एक अपवाद कहां से आ रहा है। पठनीयता और व्यावहारिकता के कारणों के लिए मैं अलग-अलग कोशिश/पकड़ ब्लॉक में कोड की हर कुछ पंक्तियों को लपेटना नहीं चाहता हूं।
मेरे पास आज एक सामान्य पकड़ है-जो सब कुछ पकड़ता है और प्रोग्राम को बंद करने से पहले एक त्रुटि लॉग करता है। यह उपयोगकर्ता के दृष्टिकोण से अच्छा है - ऐप क्रैश के बजाय क्लीन शट डाउन - लेकिन मेरे लिए बुरा है क्योंकि मुझे केवल अपवाद से एक सामान्य संदेश मिलता है (उदा। "श्रेणी से बाहर सरणी") लेकिन यह नहीं पता कि वह कहां से आ रहा है।
कैच-सब को हटाने और प्रोग्राम को क्रैश करने के बजाय बेहतर नहीं होगा? मैं ग्राहक को विंडोज़ को एप्लिकेशन क्रैश डंप बनाने के लिए निर्देशित कर सकता हूं (जैसा कि here वर्णित है)। डंप फ़ाइल के साथ WinDbg मुझे उस कोड की स्थिति में बिल्कुल इंगित करेगा जहां अपवाद फेंक दिया गया था।
यदि ग्राहक अप्रत्याशित रूप से दुर्घटनाग्रस्त हो जाता है, तो ग्राहक के लिए यह अच्छा नहीं है। यह बेहतर है अगर यह कभी भी दुर्घटनाग्रस्त नहीं होता है। और, पकड़ो (...) ऊपर बताए अनुसार एक दुःस्वप्न डीबगिंग करता है। शुरुआत में यह मुश्किल हो सकता है कि ग्राहकों को मुश्किल दुर्घटना हो, लेकिन जैसा कि रिपोर्ट किया जाता है, वे कम से कम लगातार (सिद्धांत में) बन जाएंगे, जब तक यह 0 तक पहुंच न जाए। – RPGillespie
@ आरपीजीलेस्पी: धन्यवाद, यह मेरी तर्क कम या ज्यादा है, भी। यदि मुझे गलत क्रैश नहीं हैं तो मैं कोड के उन क्षेत्रों को ढूंढ और ठीक कर सकता हूं जहां अपवादों को फेंक दिया जा सकता है। –
शून्य त्रुटि से विभाजित करने के लिए कोई बहाना नहीं है या किसी भी लिखित सी ++ प्रोग्राम में कभी भी उठाए गए अन्य तर्क त्रुटि का कोई बहाना नहीं है। यह मैला प्रोग्राम डिजाइन का संकेतक है। –