2013-03-24 9 views
6

के माध्यम से बनाते हैं मेरा प्रश्न विशिष्ट लगता है, लेकिन मुझे संदेह है कि यह अभी भी एक C++ डीबग समस्या का हो सकता है।काउंटर निकास कोड 13 9 चलते समय, लेकिन gdb इसे

मैं वायरलेस नेटवर्क अनुकरण करने के लिए omnet ++ का उपयोग कर रहा हूं। omnet ++ स्वयं एक सी ++ प्रोग्राम है।

जब मैं अपना प्रोग्राम चलाता हूं (उबंटू 12.04 में ओमनेट ++ 4.2.2 के साथ संशोधित इनसेट फ्रेमवर्क) में प्रोग्राम को बाहर निकाला जाता है: प्रोग्राम के बाहर निकलने के बाद प्रोग्राम बाहर निकलता है (लोगों का कहना है कि इसका मतलब स्मृति विखंडन है) जब किसी निश्चित हिस्से को छूता है कोड, जब मैं डीबग करने का प्रयास करता हूं, gdb 'समस्याग्रस्त' कोड के साथ कुछ भी गलत रिपोर्ट नहीं करता है जहां सिमुलेशन पहले से बाहर निकलता है, असल में, डीबग कोड के इस हिस्से के माध्यम से जाता है और अपेक्षित परिणाम आउटपुट करता है।

gdb संस्करण जानकारी: जीएनयू gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04

किसी को भी मुझे बता सकते हैं क्यों रन विफल रहता है लेकिन डिबग नहीं करता है?

बहुत धन्यवाद!

+2

अपरिभाषित व्यवहार की तरह लगता है। हम समस्याग्रस्त कोड को देखे बिना मदद नहीं कर सकते हैं। –

उत्तर

17

बाहर निकलने के कोड 139 (लोगों को इस का मतलब है स्मृति विखंडन का कहना है)

नहीं, यह मतलब है कि आपके प्रोग्राम (लिनक्स पर SIGSEGV और अधिकांश अन्य UNIXes) संकेत 11 के साथ मर गया, यह भी segmentation fault के रूप में जाना।

क्या कोई मुझे बता सकता है कि रन विफल क्यों होता है लेकिन डीबग नहीं करता है?

आपका कार्यक्रम प्रदर्शन अपरिभाषित व्यवहार, और कुछ भी कर सकते हैं (है कि कभी कभी सही ढंग से काम करने के लिए प्रदर्शित होने के शामिल है)।

आपका पहला चरण इस प्रोग्राम को वालग्रिंड के तहत चलाना चाहिए, और यह रिपोर्ट की सभी त्रुटियों को ठीक करना चाहिए।

यदि उपर्युक्त करने के बाद, प्रोग्राम अभी भी दुर्घटनाग्रस्त हो जाता है, तो आपको इसे कोर (ulimit -c unlimited; ./a.out) डंप करना चाहिए और उसके बाद जीडीबी के साथ कोर डंप का विश्लेषण करना चाहिए: gdb ./a.out core; फिर where कमांड का उपयोग करें।

+0

आपके त्वरित उत्तर के लिए धन्यवाद, मैं कमांड प्रॉम्प्ट में प्रोग्राम को चलाने के लिए देख रहा हूं, अब मैं सिम्युलेटर द्वारा फंस गया हूं। मैं valgrind के साथ विश्लेषण के बाद वापस रिपोर्ट करेंगे। – ulyssis2

+0

अब मैं कमांड प्रॉम्प्ट के माध्यम से प्रोग्राम चला सकता हूं और डीबग कर सकता हूं, दोनों "समस्याग्रस्त कोड" पर चलने और डीबग करने के बाद, फिर मैं ग्रहण आईडीई का उपयोग करता हूं, मुझे लगता है कि डीबग मोड में, यह कमांड प्रॉम्प्ट का उपयोग करने के साथ उसी स्थान पर रुक जाता है, जब मैं चरण-दर-चरण प्रोग्राम चलाता हूं, तो यह "समस्याग्रस्त कोड" के माध्यम से भी निष्पादित होता है, लेकिन जब मैं इसे चलाता हूं, तो प्रोग्राम "समस्याग्रस्त कोड" के आस-पास कहीं गिर जाता है। मुझे लगता है कि यह आईडीई के कारण है, क्योंकि जीयूआई भी एक कार्यक्रम है, और सामान्य रन मोड के तहत अच्छी तरह से काम नहीं कर सकता है। मुझे कोई जानकारी नहीं है की क्यों। – ulyssis2

+0

@ ulyssis2 वालग्रिंड क्या कहता है? कार्यक्रम आईडीई के बाहर काम करने के लिए प्रतीत होता है, लेकिन Valgrind अभी भी आपको अपनी बग के बारे में बताना चाहिए। –

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