2008-09-17 8 views
7

क्या x86 लिनक्स पर सी ++ अपवादों में फ़्लोटिंग पॉइंट अपवाद (सिग्नल) को परिवर्तित करना संभव है?सी ++ अपवादों में फ्लोटिंग पॉइंट अपवादों को परिवर्तित करना

यह डिबगिंग उद्देश्यों के लिए है, इसलिए गैर-लाभकारीता और अपूर्णता ठीक है (उदाहरण के लिए, यदि यह 100% गारंटी नहीं है कि सभी विनाशकों को बुलाया जाता है)।

उत्तर

3

सिग्नल और अपवादों के तरीके के कारण, सिग्नल फेंकने पर आप इसे तुरंत नहीं कर सकते हैं - अपवाद स्टैक के कुछ पहलुओं पर भरोसा करते हैं जो सिग्नल हैंडलर कहलाते समय सही नहीं होते हैं।

आप सिग्नल हैंडलर में एक वैश्विक चर सेट कर सकते हैं, और उसके बाद प्रोग्राम में महत्वपूर्ण बिंदुओं पर इसकी जांच कर सकते हैं और सेट अप होने पर अपवाद फेंक सकते हैं। यह आपको फेंक दिया अपवाद के बारे में सटीक जानकारी नहीं देता है, हालांकि।

+0

आप की गणना और backtrace_symbols है, जो कम से कम आप एक पूरा स्टैक ट्रेस देता है का उपयोग करते हुए संकेत हैंडलर में स्टैक ट्रेस स्टोर कर सकते हैं। –

1

मैं एक तैयार समाधान नहीं है, लेकिन एक बात आप पर signals हैं दिखाई दे सकता है (यकीन नहीं है कि आप सुरक्षित रूप से उन लोगों से सी ++ अपवाद फेंक कर सकते हैं, लेकिन यह वैसे भी डीबगिंग के लिए मदद करनी चाहिए नहीं।)

आप एसआईजीएफपीई के लिए एक सिग्नल हैंडलर स्थापित कर सकता है, और अपने डीबगिंग उद्देश्यों के लिए इसका उपयोग कर सकता है।

0

फ़्लोटिंग पॉइंट अपवादों के लिए उचित सिग्नल हैंडलर स्थापित करने के लिए मूल विचार आपके लिए होगा। अपने सिग्नल हैंडलर के अंदर, आप एक अपवाद फेंक सकते हैं (या उपयोगकर्ता द्वारा परिभाषित सिग्नल को दूसरी प्रक्रिया में भेज सकते हैं जो अपवाद उठाएगा, या किसी अन्य थ्रेड को इत्यादि के लिए एक संदेश भेज देगा इत्यादि आदि)। वास्तव में अपवाद फेंकने के कई तरीके हैं - मुख्य बात सिग्नल को संभालना है।

3

जीसीसी विकल्प -फोन-कॉल-अपवाद आपके लिए कुछ उपयोग हो सकता है। इस पर कोई दस्तावेज नहीं मिला, हालांकि आपका माइलेज भिन्न हो सकता है।

8

अपने सी ++ मानक पुस्तकालय कार्यान्वयन TR1 कार्यों fetestexcept, feraiseexcept और feclearexcept (मेरा अभी तक तो मैं यह परीक्षण नहीं कर सकते नहीं है) आप चल बिन्दु त्रुटियों के पांच प्रकार का पता लगा सकते हैं और फिर आप जो कुछ अपवाद फेंक कर सकते हैं का समर्थन करता है तुम्हें चाहिए।

इन कार्यों के विवरण के लिए here देखें।

पुस्तक की

मैं भी खंड 12.3, सलाह देते हैं "प्रबंध फ्लोटिंग प्वाइंट पर्यावरण," सी ++ स्टैंडर्ड लाइब्रेरी एक्सटेंशन: एक ट्यूटोरियल और संदर्भ पीट बेकर, ISBN-13 द्वारा: 9780321412997, इन कार्यों का एक बहुत अच्छा विवरण के लिए नमूना कोड के साथ।

alt text http://ak.buy.com/db_assets/prod_images/225/202452225.jpg

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