2012-07-20 21 views
8

द्वारा संकलित स्रोत फ़ाइलों को नहीं मिला है, जब मेरी परियोजना को क्लैंग ++ के साथ संकलित करते हैं, तो स्रोत फ़ाइलों का पथ स्पष्ट रूप से ऑब्जेक्ट कोड में शामिल नहीं होता है। इसका मतलब है कि जीडीबी कोड प्रदर्शित करने के लिए स्रोत फ़ाइलों को खोजने में असमर्थ है। विशिष्ट उदाहरणों के लिए, मैं निर्देशिका जोड़ने के लिए gdb के directory कमांड का उपयोग कर सकता हूं, लेकिन मेरे प्रोजेक्ट में बहुत सारी स्रोत निर्देशिकाएं हैं और यह बहुत जल्दी परेशान हो जाती है।gdb को क्लैंग ++

जब मैं अपनी कॉन्फ़िगरेशन को g ++ का उपयोग करने के लिए स्विच करता हूं, तो gdb बस मेरी सभी स्रोत फ़ाइलों को पाता है।

इस कार्यक्षमता ने हिम तेंदुए पर + 2. 2.9 क्लैंग काम किया, लेकिन शेर पर क्लैंग ++ 3.1 के साथ काम नहीं करता है। मेरे पास एक्सकोड 4.3.2 है।

क्या कोई क्लैंग विकल्प है जो ऑब्जेक्ट फ़ाइलों में पूर्ण पथों का उपयोग करने के लिए मजबूर करता है? मेरी कॉन्फ़िगरेशन के साथ कुछ और गलत हो सकता है?

+0

मुझे यकीन नहीं है लेकिन आपने '-d' किया है? –

+0

@NeelBasu मेरी स्रोत फाइलें 40 से अधिक निर्देशिकाओं में फैली हुई हैं, और मैं 40-बार '-d' का उपयोग नहीं करना चाहूंगा। – robert

उत्तर

4

मुझे यह पता चला: समस्या तब होती है जब पदानुक्रमित मेकफ़ाइल के साथ परियोजनाओं का निर्माण होता है। यदि एक उपनिर्देशिका किसी मूल निर्देशिका से बनाई गई है (मेरे मेकफ़ाइल में: make -w -C sub-dir) तो gdb स्रोत फ़ाइल नहीं खोल सकता है। उप-डीआईआर में बदलते समय और कॉलिंग केवल इस निर्देशिका के लिए बनाते हैं तो gdb स्रोत पाता है। आप जेनरेट ऑब्जेक्ट फ़ाइलों में बिल्ड-पथ खोजकर इसे सत्यापित कर सकते हैं। मैंने strings object-file | grep $HOME का उपयोग किया।

मैंने यह भी देखा: यह एक ऑब्जेक्ट फ़ाइल के लिए नहीं था: यह फ़ाइल सीसी के साथ संकलित नहीं की गई है। यह फ़ाइल esql के साथ संकलित किया गया है। अंत में, esql सीसी कहते हैं।

यही कारण है कि मैंने इस कामकाज की कोशिश की: सीधे क्लैंग को कॉल करने से न कहें। शेल स्क्रिप्ट से कॉल क्लैंग करें।

$ cat ~/bin/mycc 

/usr/bin/cc "[email protected]" 

$ export CC=mycc 
$ make 

Hurray! जीडीबी स्रोत फाइलें खोलता है!

बीटीडब्लू: make -w -C sub-dir(cd sub-dir;make -w) द्वारा प्रतिस्थापित करना एक और कामकाज है।

+0

यह दिलचस्प है, लेकिन मैं [waf] (https://code.google.com/p/waf/) का उपयोग करता हूं, जिसमें स्रोतों को पदानुक्रमित तरीके से शामिल किया जाता है, लेकिन वेफ स्वयं श्रेणीबद्ध नहीं है। – robert

+0

सत्यापित: एक छोटी परियोजना crated। परियोजना बनाने के लिए वेफ का उपयोग करना। जीडीबी विफल रहता है: '1 \t ../dir1/foo.c: ऐसी कोई फ़ाइल या निर्देशिका नहीं। परियोजना के पुनर्निर्माण के बाद: 'सीसी = mycc ./waf-1.6.1 बिल्ड कॉन्फ़िगर करें' समस्या समाप्त हो गई है: '(gdb) सूची मुख्य int मुख्य() { वापसी 0; } ' – Rene

+0

मैं कोशिश करूँगा। – robert