मेरे पास कुछ प्रोग्राम है और हर बार जब मैं इसे चलाता हूं, तो यह अपवाद फेंकता है और मुझे नहीं पता कि यह वास्तव में कैसे फेंकता है यह जांचने के लिए, इसलिए मेरा सवाल है, क्या अपवाद पकड़ना संभव है और यह अग्रिम धन्यवाद (मैं पंक्तियों जो अपवाद फेंकता पाया जाता है) को मुद्रितअज्ञात अपवाद को कैसे पकड़ें और इसे प्रिंट करें
उत्तर
यह std::exception
से निकला है, तो आप संदर्भ द्वारा पकड़ कर सकते हैं:
try
{
// code that could cause exception
}
catch (const std::exception &exc)
{
// catch anything thrown within try block that derives from std::exception
std::cerr << exc.what();
}
लेकिन अगर अपवाद कुछ वर्ग है कि std::exception
से प्राप्त नहीं है, आपको इसके समय से पहले जानना होगा (यानी आपको std::string
यापकड़ना चाहिए)।
आप एक पकड़ने सब कर सकते हैं:
try
{
}
catch (...)
{
}
लेकिन फिर आप अपवाद के साथ कुछ नहीं कर सकते।
आर सैमुअल क्लैचको द्वारा सुझाए गए अनुसार प्रयास करें। अगर इससे मदद नहीं मिलती है, तो कुछ और मदद कर सकता है जो मदद कर सकता है:
ए) यदि आपका डीबगर इसका समर्थन करता है तो अपवाद प्रकार (हैंडल या अनचाहे) पर ब्रेकपॉइंट रखें।
बी) कुछ प्रणालियों पर, कंपाइलर एक फेंक कथन निष्पादित होने पर एक कॉल (अनियंत्रित?) फ़ंक्शन उत्पन्न करता है। यह पता लगाने के लिए कि आपके सिस्टम के लिए कौन सा फ़ंक्शन है, एक सरल हैलो वर्ल्ड प्रोग्राम लिखें, जो एक अपवाद फेंकता है और पकड़ता है। एक डीबगर शुरू करें और अपवाद कन्स्ट्रक्टर में ब्रेकपॉइंट रखें, और इसे कहां से बुलाया जा रहा है से देखें। कैलिंग फ़ंक्शन शायद __throw() जैसा कुछ है। इसके बाद, उस प्रोग्राम के साथ फिर से डीबगर शुरू करें जिसे आप डिबगी के रूप में जांचना चाहते हैं। उपर्युक्त कार्य (__throw या जो कुछ भी) पर ब्रेकपॉइंट रखें और प्रोग्राम चलाएं। जब अपवाद फेंक दिया जाता है, तो डीबगर बंद हो जाता है और आप यह जानने के लिए वहां क्यों हैं।
यदि आप जीसीसी या क्लैंग के लिए एबीआई का उपयोग करते हैं तो आप अज्ञात अपवाद प्रकार को जान सकते हैं। लेकिन यह गैर मानक समाधान है।
सी ++ 11 में देखें आपके पास: साइट से std::current_exception
उदाहरण कोड:
#include <iostream>
#include <string>
#include <exception>
#include <stdexcept>
void handle_eptr(std::exception_ptr eptr) // passing by value is ok
{
try {
if (eptr) {
std::rethrow_exception(eptr);
}
} catch(const std::exception& e) {
std::cout << "Caught exception \"" << e.what() << "\"\n";
}
}
int main()
{
std::exception_ptr eptr;
try {
std::string().at(1); // this generates an std::out_of_range
} catch(...) {
eptr = std::current_exception(); // capture
}
handle_eptr(eptr);
} // destructor for std::out_of_range called here, when the eptr is destructed
Dawid Drozd जवाब से प्रेरित होकर:
इस शीर्ष लेख शामिल #include <exception>
try
{
// The code that could throw
}
catch(...)
{
auto expPtr = std::current_exception();
try
{
if(expPtr) std::rethrow_exception(expPtr);
}
catch(const std::exception& e) //it would not work if you pass by value
{
std::cout << e.what();
}
}
- 1. वाक्यविन्यास अपवाद को कैसे पकड़ें
- 2. UrlFetchApp.fetch अपवाद को कैसे पकड़ें
- 3. अपर्याप्त अपवाद कैसे पकड़ें?
- 4. एक घातक अपवाद पकड़ें और
- 5. एमवीसी व्यू के अपवाद को कैसे पकड़ें?
- 6. कैमरे से वाईयूवी स्वरूपित वीडियो को कैसे पकड़ें, इसे प्रदर्शित करें और इसे संसाधित करें
- 7. इसे फिर से फेंकने के लिए अपवाद क्यों पकड़ें?
- 8. अपवाद के स्टैक ट्रेस को प्रिंट करें
- 9. अपवाद पकड़ें, इनपुट या दोनों मान्य करें?
- 10. कोशिश करें/पकड़ें और थ्रेडिंग
- 11. अपवादों को कैसे पकड़ें
- 12. "अज्ञात अपवाद" जब "location.href"
- 13. Clojurescript में किसी भी जावास्क्रिप्ट अपवाद को कैसे पकड़ें?
- 14. कोडइग्निटर - डीबी त्रुटियों को कैसे पकड़ें?
- 15. स्ट्रिंग के पहले शब्द को कैसे पकड़ें और इसे int में कैसे परिवर्तित करें? jQuery
- 16. त्रुटि फ़ंक्शन पर कॉल को कैसे पकड़ें (और अनदेखा करें)?
- 17. इंडेंटेशन एरर को कैसे पकड़ें
- 18. "अज्ञात चयनकर्ता" अपवाद
- 19. पैरेंट पर टच इवेंट को पकड़ें, इसे संभालें और बच्चों को पास करें
- 20. पायथन: इस तरह के अपवाद को कैसे पकड़ें?
- 21. डिकंप्रेस IOError को कैसे पकड़ें?
- 22. आईफ़्रेम अपवादों को पकड़ें
- 23. xml फ़ाइल से स्ट्रिप टिप्पणियां और इसे प्रिंट करें
- 24. एक्सपीएस-फाइल में प्रिंट करें और फिर इसे प्रिंटर
- 25. कोशिश करें .. हमेशा ब्लॉक को पकड़ें?
- 26. जावास्क्रिप्ट कोशिश/पकड़ें: त्रुटियां या अपवाद?
- 27. नेस्टेड कोशिश करें/पकड़ें
- 28. ईपीएसन जावा पॉज़ एडीके अपवाद: इसे
- 29. यूनिक्स प्रोग्रामिंग। स्ट्रक्चर टाइमवल इसे प्रिंट कैसे करें (सी-प्रोग्रामिंग)
- 30. अज्ञात टाइमज़ोन एरर अपवाद Py2Exe
@ आर सैमुअल क्लैचको: बहुत धन्यवाद, एक और सवाल, क्या मैं आपके विधि का उपयोग नए के अपवादों को हटा सकता हूं और हटा सकता हूं? – helloWorld
@helloWorld - हां, यह 'नए', 'हटाएं' और उनके द्वारा बुलाए गए किसी भी कन्स्ट्रक्टर या विनाशक को अपवादों को पकड़ लेगा (बशर्ते 'नया 'या' हटाएं 'कथन' try' block 'के भीतर है)। –
अगर std :: अपवाद से अपवाद नहीं लिया गया है तो मुझे अपनी समस्या का निवारण कैसे करना चाहिए? – javapowered