द्वारा अपवादित करने के लिए सी ++ फेंकने का कारण कैसे बनें यदि फेंकने वाले अपवाद को एक निश्चित पकड़ से संभाला जाता है तो फेंक साइट पर कोर को डंप करने का कोई तरीका है ब्लॉक? जब मैं अपवाद शीर्ष स्तर तक पहुंच जाता हूं तो मुझे जी ++ के साथ क्या होता है जैसा कुछ पसंद है। ,अपवाद को किसी विशेष पकड़ ब्लॉक
try {
bar();
try {
foo();
} catch(...) {
# pragma dump_at_throw_site
}
} catch(...) {
std::cerr << "There was a problem" << std::endl;
}
इस तरह अगर() किसी भी अपवाद foo से फेंका या उसके कॉल प्राप्त करने वाला का कि foo (की कॉल-साइट तक पहुँच जाता है) एक कोर डंप का कारण होगा:
उदाहरण के लिए, मैं कुछ इस तरह चाहते हैं फेंक साइट पर ताकि कोई यह देख सके कि अपवाद किसने किया है जो इसे इस स्तर तक पहुंचाता है।
दूसरी तरफ, बार() द्वारा फेंकने वाले अपवादों को सामान्य रूप से संभाला जाएगा।
मुझे लगता है कि सामान्य तरीका इसे पकड़ने के लिए नहीं है, और उम्मीद है कि संकलक/पर्यावरण आपके लिए डंप करता है। 'फेंक' अभिव्यक्ति के बाद फेंक साइट के बारे में जानकारी _instant_ खो गई है। –
ठीक है, यही कारण है कि मैं कोर डंप के लिए तर्क उत्पन्न करने के लिए संकलक को बताना चाहता हूं ताकि ढेर अवांछित न हो। यह संभव है क्योंकि यह वही होता है जब कॉल श्रृंखला की जड़ तक * कोई * पकड़ ब्लॉक नहीं होता है। हालांकि, बाहरी पकड़ ब्लॉक हैं जो मेरे मामले में अपवाद को पकड़ेंगे। मैं विशेष रूप से फू() के लिए फेंक साइट पर कोर को डंप करना चाहता हूं, उदाहरण के रूप में, और बार से अपवादों को अनदेखा करता हूं। मैं एक clang ++ या g ++ विशिष्ट उत्तर के साथ रह सकता हूं। – Manish
उस स्थिति में, _throw साइट_ को कोर डंप उत्पन्न करना है, कैश नहीं। हालांकि, एक विकल्प कुछ आंतरिक संरचना में कोर डंप उत्पन्न करना है, उस जानकारी को अपवाद में सहेजें, और _then_ अपवाद फेंक दें। _Then_ कैचकी उस डंप जानकारी के साथ कुछ कर सकती है। –