2011-07-06 12 views
6

द्वारा फेंक दिया गया है, आम तौर पर मैं इसे अनचाहे छोड़ दूंगा और डीबगर (जीडीबी, एक्लिप्स सीडीटी) मुझे कॉल स्टैक दिखाएगा। दुर्भाग्यवश कोड को किसी तृतीय पक्ष लाइब्रेरी द्वारा बुलाया जा रहा है जो सभी अपवादों को अवशोषित करता है। मैं तीसरे पक्ष की लाइब्रेरी से पहले अपवाद पकड़ सकता हूं, हालांकि मुझे कॉल स्टैक (स्टैक-अनइंडिंग?) नहीं दिखाई दे रहा है।यह पता लगाना कि std :: ve_of_range std :: vector.at()

मैं कैसे पता लगा सकता हूं कि अपवाद कहाँ फेंक दिया गया था?

उत्तर

5

catchpoints सहायता करेंगे? जीडीबी में catch throw कमांड दर्ज करके आप जब भी अपवाद फेंकते हैं तो आप तोड़ सकते हैं। ग्रहण में, आप इसे जीडीबी कंसोल के माध्यम से कर सकते हैं। this question देखें।

+0

उपरोक्त और धन्यवाद! हां, इस विशेष मामले में उन्होंने मदद की :) लेकिन भविष्य के लिए: क्या मैं अपवाद के प्रकार के अनुसार फ़िल्टर कर सकता हूं? तीसरी पार्टी लाइब्रेरी प्रवाह नियंत्रण के अपवादों का उपयोग करती है ... इसलिए मुझे अपवादों के बारे में बहुत सारी सूचनाएं मिलेंगी। – Ali

+0

@Ali: क्षमा करें, मुझे क्या पता है लिंक में है। मेरे पास इसका कोई वास्तविक अनुभव नहीं है। मुझे अपवाद प्रकार निर्दिष्ट करने का कोई तरीका नहीं दिख रहा है। –

+1

मैं आपका उत्तर स्वीकार करना चाहता हूं लेकिन सामान्य दर्शकों के लिए अधिक जानकारी जोड़ें (जीडीबी कंसोल में कैच फेंक टाइप करें) और यह लिंक: http://stackoverflow.com/q/1109922/341970 – Ali

4

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

+0

उपरोक्त और धन्यवाद! मैं जीडीबी कैच फेंक समाधान के साथ अपवादों को फ़िल्टर नहीं कर सकता, हालांकि, एक ब्रेकपॉइंट डालने जहां out_of_range फेंक दिया गया है, समस्या को हल करता है। – Ali

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

  • कोई संबंधित समस्या नहीं^_^