नहीं देती हैं, मैं एक एमपीआई वातावरण में इंटेल फोर्ट्रान कंपाइलर (ifort
) का उपयोग कर रहा हूं। यह पता चला है कि मेरे कोड में एक बफर ओवरफ़्लो है क्योंकि मैंने झंडे -g -O2 -check bounds
के साथ संकलित किया है। थोड़ी देर चलाने के बाद, मैं यह संदेश प्राप्त:इंटेल फोरट्रान - -कैच सीमाएं लाइन नंबर
forrtl: severe (408): fort: (2): Subscript #1 of the array XX has value 4 which is greater than the upper bound of 3
Image PC Routine Line Source
program.exe 00000000006E757E Unknown Unknown Unknown
program.exe 00000000006E6016 Unknown Unknown Unknown
program.exe 00000000006905B2 Unknown Unknown Unknown
program.exe 0000000000642E6B Unknown Unknown Unknown
program.exe 0000000000643381 Unknown Unknown Unknown
program.exe 00000000005F33FB Unknown Unknown Unknown
program.exe 00000000004139E7 Unknown Unknown Unknown
program.exe 000000000040A6B4 Unknown Unknown Unknown
program.exe 0000000000409D2C Unknown Unknown Unknown
libc.so.6 000000380D61ECDD Unknown Unknown Unknown
program.exe 0000000000409C29 Unknown Unknown Unknown
यह महान है - मैं अब पता है कि मैं XX
कब्जा कर रही है, लेकिन कहाँ? gfortran
का उपयोग करके, -fbounds-check
मुझे एक फ़ाइल और लाइन नंबर देगा। क्या कोई तरीका है कि मैं इसे ifort
के साथ प्राप्त कर सकता हूं?
अपने वर्तमान झंडे के साथ -ट्रैकबैक का उपयोग करने का प्रयास करें। तब संकलक को स्रोत लाइन का पता लगाने के लिए ऑब्जेक्ट फ़ाइलों में अतिरिक्त जानकारी उत्पन्न करनी चाहिए जहां त्रुटि समय पर त्रुटि होती है। – milancurcic
मैं इसका परीक्षण करूँगा और कोड को खराब जगह तक पहुंचने पर कुछ मिनटों में वापस आऊंगा। – mgilson
@ आईआरओ-बॉट - यह चाल है। एक उत्तर पोस्ट करें और मैं खुशी से स्वीकार करूंगा। यह अभी भी पूरी तालिका को भर नहीं पाया - संभवतः क्योंकि उनमें से कुछ "दिनचर्या" रनटाइम लाइब्रेरी या कुछ में फंस गए थे, लेकिन यह मुझे दिखाया गया कि मुझे कहां देखना है। – mgilson