2010-04-14 5 views
11

मैं सी में लिखे गए डीएलएल में एक समस्या को डीबग करने की कोशिश कर रहा हूं जो पहुंच उल्लंघन का कारण बनता है। मैं विजुअल सी ++ 2008 का उपयोग कर रहा हूं, लेकिन कोड सीधे सीमैं अपवादों पर वीसी ++ के डीबगर ब्रेक कैसे बना सकता हूं?

मुझे डेल्फी के लिए उपयोग किया जाता है, जहां डीबगर के तहत चलते समय कोई अपवाद होता है, तो प्रोग्राम तुरंत डीबगर को तोड़ देगा और यह आपको देगा कार्यक्रम राज्य की जांच करने का मौका।

First-chance exception at blah blah blah: Access violation reading location 0x04410000. नहीं टूटता है, कुछ भी नहीं: विजुअल C++ में, हालांकि, सभी मैं आउटपुट टैब में एक संदेश है। जब तक यह मेरे डेल्फी EXE में वापस नहीं आ जाता है, तब तक यह स्टैक चला जाता है और अनदेखा करता है, जो मुझे कुछ गलत पहचानता है और मुझे वहां अलर्ट करता है, लेकिन उस बिंदु तक मैंने कॉल स्टैक की कई परतें खो दी हैं और मुझे नहीं पता कि क्या हो रहा है।

मैंने अन्य डीबगिंग तकनीकों का प्रयास किया है, लेकिन जो भी हो रहा है वह एक सी मैक्रो के अंदर घोंसला वाले लूप के भीतर गहराई से हो रहा है जिसे 500 से अधिक बार बुलाया जा रहा है, और यह मेरे कौशल (या मेरे धैर्य) से थोड़ा सा है के माध्यम से पता लगाने।

मैं समझ वहाँ किसी तरह "पहले मौका" अपवाद प्राप्त करने के लिए वास्तव में मुझे एक "मौका" इसे संभाल करने के लिए देने के लिए हो गया है। शायद कुछ "पहले मौके अपवादों पर तत्काल तोड़ें" कॉन्फ़िगरेशन सेटिंग जो मुझे नहीं पता है, लेकिन ऐसा लगता है कि यह सब खोजने योग्य नहीं है।

क्या किसी को पता है कि यह कहां है और इसे कैसे सक्षम किया जाए?

उत्तर

16

डीबग मेनू से, अपवाद चयन करें और आप डिबगर पर करना चाहते हैं, अपवाद के बक्सों को चिह्नित करें। "एक्सेस उल्लंघन" "Win32 अपवाद" के अंतर्गत है।

+0

धन्यवाद। वह काम किया। मुझे आश्चर्य है कि प्रवेश उल्लंघन क्यों डिफ़ॉल्ट रूप से चेक नहीं किया जाता है ... –

+0

@Mason: कोई समस्या नहीं। मुझे नहीं लगता कि उनमें से कोई भी डिफ़ॉल्ट रूप से चेक किया गया है। मेरा अनुमान है कि "अपवाद तोड़ना" सक्षम होने पर काफी महत्वपूर्ण प्रदर्शन दंड होता है (हालांकि मुझे वास्तव में पता नहीं है)। –

+0

मुझे ऐसा नहीं लगता। मैं सी ++ को अच्छी तरह से नहीं जानता, लेकिन डेल्फी में, प्रदर्शन जुर्माना तब तक शून्य होता है जब तक यह वास्तव में एक पर टूट जाता है, और जब (अगर) ऐसा होता है, तो आमतौर पर इसका मतलब है कि कुछ गलत हो गया है और डीबगर बिल्कुल वही है जहां आप चाहते हैं हो। –

1

तुम भी पता पंक्ति "पर ... पहली मौका अपवाद" में निर्दिष्ट का उपयोग करते हुए एक डेटा ब्रेकप्वाइंट बना सकते हैं।

जेम्स 'जवाब से जारी रखते हुए, अपवाद आप देख रहे हैं Win32 अपवाद अनुभाग के नीचे हैं। आपको वहां पहुंच उल्लंघन देखना चाहिए।

+0

क्या यह काम करेगा? यह एक "पठन" त्रुटि है, और यदि आप प्रश्न में पते पर मूल्य बदलते हैं तो AFAIK डेटा ब्रेकपॉइंट केवल तभी बंद हो जाते हैं। –

+0

निष्पादन एक विशिष्ट स्थान तक पहुंचने पर भी आप तोड़ सकते हैं (मुझे लगता है कि यह ब्रेकपॉइंट गुण संवाद पर केवल एक विकल्प है)। –

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