स्थिति निम्नानुसार है: थ्रेड ए अपवाद को पकड़ता है, अपवाद के डेटा को मेमोरी में कहीं भी बचाता है (अपवाद फ़िल्टर में GetExceptionInformation का उपयोग करके), और बाद में थ्रेड बी को अपवाद जानकारी मिलती है और इसे फिर से बनाना चाहता है। लेकिन बात यह है कि, जब थ्रेड बी पकड़े गए अपवाद को पुनर्स्थापित करता है, तो मुझे मूल कॉल स्टैक याद आ रहा है जो अपवाद का कारण बनता है।
मैं मूल कॉल स्टैक खोए बिना अपवाद को कैसे पुनर्स्थापित कर सकता हूं? (ध्यान दें कि यह प्रश्न सी ++ के बारे में है)।मूल कॉल स्टैक खोए बिना अपवाद कैसे दोहराएं?
उत्तर
आप पकड़ ब्लॉक में ढेर को खोल सकते हैं और अपवाद के हिस्से के रूप में इसे सहेज सकते हैं। सी ++ में स्टैक को अनइंड करना थोड़ा मुश्किल है, लेकिन आप क्रैशडंप कलेक्टर कोड पर एक नज़र डाल सकते हैं जो कि उदाहरण के लिए WxWidgets के साथ आता है।
उत्तर के रूप में चिह्नित किया गया है हालांकि मेरे मामले में पूरी तरह व्यावहारिक नहीं है –
प्रश्न यह है कि आपको "प्राप्त करने" धागे में ढेर को पारित करने की आवश्यकता क्यों होगी।
मुझे लगता है कि आपको मूल रूप से कुछ त्रुटि लॉग पर इसकी रिपोर्ट करने के लिए स्टैक की आवश्यकता है। आप पकड़ने वाले धागे में ढेर चल सकते हैं, या मिनी डंप का उत्पादन कर सकते हैं, या जो भी त्रुटि जानकारी आप एकत्र करना चाहते हैं, और उसके बाद प्राप्तकर्ता धागे को अपवाद की एक प्रति (यदि संभव हो, स्लाइसिंग से सावधान रहें) पास करें।
अपवाद जिसे मैंने एक फोर्क-जॉइन रूटीन के अंदर पकड़ा था। इसलिए यदि कुछ कार्यकर्ता धागे में एक अपवाद फेंक दिया गया है, तो मैं इसे मुख्य धागे में पास करना चाहता हूं और वहां उसे फिर से जोड़ना चाहता हूं (+ मैं मूल ढेर खोना नहीं चाहता) –
- 1. अपवाद पर पायथन फ़ंक्शन कॉल दोहराएं?
- 2. सी # एक अपवाद दोबारा दोहराएं: आईडीई में अपवाद स्टैक कैसे प्राप्त करें?
- 3. सी # में, मैं स्टैक ट्रेस खोए बिना InnerException को कैसे पुनर्स्थापित कर सकता हूं?
- 4. प्रिंट पायथन स्टैक ट्रेस उठाए बिना अपवाद
- 5. जावा में स्टैक ट्रेस के बिना अपवाद
- 6. एक स्टैक ट्रेस के बिना पुनरावर्ती अपवाद - रीसेट कैसे करें?
- 7. अपवाद स्टैक
- 8. कॉल स्टैक
- 9. Control.EndInvoke अपवाद के लिए कॉल स्टैक रीसेट करता है
- 10. आईआईएस स्टैक ओवरफ्लो अपवाद
- 11. मूल कोड - फ़ंक्शन कॉल स्टैक (बैकट्रैक) प्रोग्रामेटिक रूप से
- 12. डेटा खोए बिना एंड्रॉइड एपीके को अनइंस्टॉल कैसे करें?
- 13. जावास्क्रिप्ट अपवाद स्टैक ट्रेस
- 14. हास्केल: बिना किसी स्टैक ओवरफ्लो
- 15. पायथन में, मैं मूल कॉल स्टैक को बनाए रखने के दौरान अपवाद को फिर से कैसे उठा सकता हूं?
- 16. आईसीएस पर मूल स्टैक ट्रेस?
- 17. कलर हाइलाइटिंग खोए बिना, ऑक्टेक्स फ़ॉन्टिफिकेशन को कैसे अक्षम करें?
- 18. डेटा खोए बिना MySQL तालिका को कैसे बदला जाए?
- 19. पुराना डेटा खोए बिना FileOutputStream के साथ डेटा कैसे लिखें?
- 20. जावा अपवाद स्टैक सीमा की 1024 लाइनों से कैसे बचें
- 21. मुझे कॉल स्टैक
- 22. दोहराएं
- 23. दोहराएं
- 24. सी # में अपवाद के स्टैक ट्रेस को कैसे प्रारूपित करें?
- 25. AppDomain.FirstChanceException और स्टैक ओवरफ़्लो अपवाद
- 26. एस्टेरिक्स्क: मूल कॉल डायलप्लान
- 27. स्टैक ओवरफ्लो त्रुटि, View.inflate अपवाद
- 28. जावास्क्रिप्ट में अधिकतम कॉल स्टैक कैसे बढ़ाएं?
- 29. कॉल स्टैक का निरीक्षण कैसे करें
- 30. अधिकतम कॉल स्टैक आकार एक सेटटाइमआउट कॉल
बस यह सुनिश्चित करना चाहता था कि मुझे ऐसे उत्तर नहीं मिले जो उदाहरण के लिए सी # के लिए विशिष्ट हैं :) –
कुछ समाधान सबसे निश्चित रूप से भाषा/मंच विशिष्ट हैं। सी ++ और सी # अपवाद अलग-अलग होते हैं, और सी ++ अपवाद अलग-अलग प्लेटफार्मों पर अलग-अलग लागू होते हैं। –
इस [स्टैक ओवरफ्लो थ्रेड] में एक अच्छा समाधान वर्णित है (http://stackoverflow.com/questions/23820633/gdb-prevent-losing-backtrace-in-a-catch-rethrow- स्थिति) –