2010-04-12 11 views
7

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

The program '[5500] test.exe: Native' has exited with code 0 (0x0). 

मेरे कार्यक्रम है, जो अत्यंत है: डिबगर उम्मीद है कि यह किसी भी तरह जाल जो कुछ भी कार्यक्रम निरस्त करने के लिए पैदा कर रहा था चाहते हैं, लेकिन फिर भी डिबगर कार्यक्रम बस अचानक समाप्त हो जाती भीतर डिबगर में अंतिम पंक्ति है में कार्यक्रम बड़े और बेहद पुराने, बहुत से आत्म निदान हैं। मेरा संदेह यह है कि शायद एक आत्म परीक्षण विफल हो गया है और शायद मैंने "बाहर निकलें()" कहा, एक संवाद पॉप अप करना भूल गया।

मेरी क्यू अब शेर है, मैं कोड में किस बिंदु से पता लगा सकता हूं, मेरा प्रोग्राम छोड़ दिया गया?

+1

समाधानों में से एक समाधान निकास() जैसे कार्यों के लिए कॉल के लिए सभी कोड खोजना और ब्रेकपॉइंट्स रखना है। वास्तव में अगर आपके पास बाहर निकलने के लिए कॉल है() अनचाहे यह खराब डिजाइन का संकेत है - आपके पास एक रैपर फ़ंक्शन होना चाहिए जो एक संदेश दिखाता है और फिर बाहर निकलें()। – sharptooth

उत्तर

4

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

5

exit() और terminate() पर ब्रेकपॉइंट सेट करें (शायद एक दूसरे को कॉल करता है, लेकिन मुझे यकीन नहीं है)।

+0

temrniate() कॉल abort(), बाहर निकलें नहीं()। – sharptooth

+0

@ मार्सेलो कैंटोस: आप कहते हैं "बाहर निकलने पर ब्रेकपॉइंट सेट करें()" जैसे कि उनमें से केवल उनमें से एक था ... लेकिन सैकड़ों हैं। क्या आप सुझाव दे रहे हैं कि मैं * निकास() के भीतर किसी भी तरह ब्रेकपॉइंट * डालूं? – Mick

+0

@ मिक: कमांड लाइन डीबगर में, 'ब्रेक एक्जिट' बस यही करेगा। – Potatoswatter

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