2013-02-21 7 views
6

नहीं देती हैं, मैं एक एमपीआई वातावरण में इंटेल फोर्ट्रान कंपाइलर (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 के साथ प्राप्त कर सकता हूं?

+1

अपने वर्तमान झंडे के साथ -ट्रैकबैक का उपयोग करने का प्रयास करें। तब संकलक को स्रोत लाइन का पता लगाने के लिए ऑब्जेक्ट फ़ाइलों में अतिरिक्त जानकारी उत्पन्न करनी चाहिए जहां त्रुटि समय पर त्रुटि होती है। – milancurcic

+0

मैं इसका परीक्षण करूँगा और कोड को खराब जगह तक पहुंचने पर कुछ मिनटों में वापस आऊंगा। – mgilson

+0

@ आईआरओ-बॉट - यह चाल है। एक उत्तर पोस्ट करें और मैं खुशी से स्वीकार करूंगा। यह अभी भी पूरी तालिका को भर नहीं पाया - संभवतः क्योंकि उनमें से कुछ "दिनचर्या" रनटाइम लाइब्रेरी या कुछ में फंस गए थे, लेकिन यह मुझे दिखाया गया कि मुझे कहां देखना है। – mgilson

उत्तर

6

-traceback ध्वज इंटेल और पोर्टलैंड समूह फोरट्रान कंपाइलर्स के साथ लाइन और स्रोत ट्रेसबैक के लिए ऑब्जेक्ट फ़ाइलों में उत्पन्न होने वाली अतिरिक्त जानकारी का अनुरोध करने के लिए उपयोग किया जा सकता है। जब रन टाइम के दौरान एक गंभीर त्रुटि होती है, तो प्रोग्राम लाइन नंबर और स्रोत फ़ाइल की रिपोर्ट करने का प्रयास करेगा जहां त्रुटि हुई थी, साथ ही साथ लाइन नंबर और स्रोत फ़ाइलों को मूल प्रक्रियाओं से कॉल किया गया था जहां कॉल किए गए थे।

gfortran के लिए समतुल्य ध्वज -fbacktrace है।

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