2009-12-19 15 views
14

टैग करने और सी ++ कोड खोजने के लिए गुणवत्ता के तरीके पर कोई सुझाव। मैं ज्यादातर सामानों के लिए सीएससीओपी/सीटीएजी का उपयोग करता हूं, लेकिन मुझे काम पर कुछ जटिल जटिल सी ++ कोड के आसपास अपना रास्ता खोजने के लिए अपर्याप्त पाया गया है। मैंने ब्राउज़िंग कोड के लिए vim से Slickedit (जो अभी भी सही नहीं है, लेकिन बेहतर है) से स्विच करना शुरू कर दिया है, लेकिन विशेष रूप से vim पर वापस जाना चाहूंगा।सी ++ स्रोत टैगिंग

मुझे जो कुछ चाहिए वह क्लास सदस्यों के दायरे को समझ सकता है, उदाहरण के लिए, यदि मैं किसी वर्ग के किसी सदस्य के संदर्भों की खोज करता हूं जहां एक ही सदस्य का नाम अन्य वर्गों (और संभवतः सी ++ कोड से बाहर) में मौजूद है, यह केवल मुझे प्रासंगिक संदर्भ देगा।

मैं ऐसा कुछ पसंद करूंगा जो पहले से ही विम के साथ अच्छा काम करता है, लेकिन कोई ओपन सोर्स पैकेज जैसे कि मैं खुद प्लगइन बना सकता हूं, ठीक होगा।

किसी भी सुझाव की सराहना की, धन्यवाद।

+0

मुझे ctags का उपयोग करने में एक ही समस्या है: कमांड का उपयोग कर 'टैग्स नामस्थान नाम :: कक्षा नाम :: विधि नाम' सबकुछ ठीक है, लेकिन विधि नाम के ऊपर कर्सर डालने और 'CTRL +] टाइप करें, यह गलत विधि पर जाने में असफल रहा , मुझे पता चलता है कि 'g +] का उपयोग करके वे टैग की एक सूची दिखाते हैं, आप सही मिलान का चयन कर सकते हैं। मेरे लिए सबसे अच्छा वर्तमान कोड का विश्लेषण करने के लिए एक स्क्रिप्ट है और सही ढंग से कॉल करें: टैग: –

उत्तर

0

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

आशा है कि यह काम करता है!

9

doxygen का उपयोग कोड ब्राउज़ करने और एक दूसरे के साथ कक्षाओं और सदस्यों के संबंधों को देखने के लिए एक महान उपकरण का उपयोग करें। टूल आपके स्रोत कोड के लिए प्रत्येक उपयोग के संदर्भ के साथ क्लिक करने योग्य HTML आउटपुट उत्पन्न करता है। आप इसे खोजने योग्य सीएम फ़ाइल में संकलित कर सकते हैं या कीवर्ड के लिए कोड खोजने के लिए वेब सर्वर का उपयोग कर सकते हैं।

0

थोड़ी देर के लिए मैं इस उद्देश्य के लिए विभिन्न टूल मिश्रण कर रहा हूं। वी एक महान संपादक है और आप बिना किसी परेशानी के दूरस्थ कंप्यूटर पर इसे चला सकते हैं, लेकिन समापन जानकारी अर्थपूर्ण नहीं है।

जब किसी बड़ी समस्या का सामना करना पड़ता है तो मैं या तो ग्रहण सीडीटी या क्यूटीसीएटर का उपयोग करता हूं, दोनों मामलों में नवीनतम संस्करण, एक साल पहले के संस्करण वास्तव में बहुत अच्छे नहीं हैं। QTCreator एक हल्का उपकरण है, लेकिन मैं कोड का विश्लेषण करने की अपनी क्षमता पर काफी प्रभावित हूं। ग्रहण सीडीटी भारी वजन है, लेकिन मैं इंटरफ़ेस के लिए थोड़ा अधिक उपयोग किया जाता हूं, इसलिए अंत में मैं इसका उपयोग करता हूं।

जिस परियोजना पर मैं काम कर रहा हूं उसे एक अलग सैंडबॉक्स के भीतर संकलित किया गया है, जहां उन दो आईडीई में से कोई भी उपयोग नहीं किया जा सकता है, लेकिन आप केवल विश्लेषण के लिए भंडार की एक प्रति प्राप्त कर सकते हैं और एक ब्राउज़िंग टूल के रूप में आईडीई का उपयोग कर सकते हैं।

25

क्या आप वाकई सही विकल्पों के साथ सीटीएजी कहलाते हैं? सी ++ के लिए, मैं का उपयोग करें:

जब एक सी ++ सदस्य समारोह परिभाषा पार्स (जैसे "className :: समारोह":

ctags --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

यह वही प्रलेखन --c++-kinds=+p विकल्प के बारे में क्या कहना है है), ctags निर्धारित नहीं कर सकते हैं कि स्कोप विनिर्देशक एक वर्ग का नाम या नामस्थान विनिर्देशक है और हमेशा इसे एक्सटेंशन फ़ील्ड के दायरे हिस्से में कक्षा नाम के रूप में सूचीबद्ध करता है। साथ ही, अगर सी ++ फ़ंक्शन को कक्षा घोषणा (सामान्य मामला) के बाहर परिभाषित किया गया है, एक्सेस विनिर्देश (यानी सार्वजनिक, संरक्षित, या निजी) और फ़ंक्शन घोषणा में निहित कार्यान्वयन जानकारी (जैसे वर्चुअल, शुद्ध आभासी) फ़ंक्शन परिभाषा के लिए टैग जेनरेट होने पर ज्ञात नहीं है।हालांकि, यह प्रोटोटाइप
(उदा। सी ++ - प्रकार = + पी) के लिए उपलब्ध होगा।

--fields=+iaS विकल्प:

a Access (or export) of class members 
i Inheritance information 
S Signature of routine (e.g. prototype or parameter list) 

--extra=+q विकल्प:

वजह से, डिफ़ॉल्ट रूप से, केवल ctags स्रोत फ़ाइलों में पाया अलग पहचानकर्ता के लिए टैग उत्पन्न करता है। यदि आप --extra = + q विकल्प निर्दिष्ट करते हैं, तो ctags फॉर्म क्लास :: सदस्य + C++ के लिए प्रत्येक वर्ग सदस्य (डेटा और फ़ंक्शन/विधि) के लिए दूसरा, क्लास-योग्य टैग भी उत्पन्न करेगा, और फॉर्म में एफिल और जावा के लिए class.method।

--language-force=C++ विकल्प:

डिफ़ॉल्ट रूप से, स्वचालित रूप से, एक स्रोत फ़ाइल के भाषा का चयन ctags उन फ़ाइलों जिसका भाषा निर्धारित नहीं की जा सकती है अनदेखी (देखें स्रोत फ़ाइलें, ऊपर)। यह विकल्प निर्दिष्ट भाषा (केस-असंवेदनशील, या तो अंतर्निर्मित या उपयोगकर्ता परिभाषित) को प्रत्येक एक्सटेंशन फ़ाइल के लिए स्वचालित रूप से अपने एक्सटेंशन के आधार पर भाषा का चयन करने के बजाय उपयोग करने के लिए मजबूर करता है। इसके अतिरिक्त, विशेष मूल्य ऑटो इंगित करता है कि भाषा स्वचालित रूप से चुनी जानी चाहिए (जो प्रभावी रूप से इस विकल्प को अक्षम करता है)।

+1

ग्रेट उत्तर, मैं वर्षों से अपने पुराने सीटीएजी कमांड लाइन का उपयोग कर रहा हूं, भले ही मैं इन दिनों अधिक सी ++ करता हूं। मान लीजिए मैंने कभी भी मैन पेज को पढ़ना नहीं सोचा और देखें कि मुझे सी ++ के लिए और विकल्प जोड़ने की ज़रूरत है या नहीं। बहुत उपयोगी। – Dan

1

जीएनयू वैश्विक http://www.gnu.org/software/global/

यह नेविगेट उत्पन्न कर सकते हैं का प्रयास करें: अपने स्रोत कोड के लिए सक्षम वेब पृष्ठों के साथ-साथ vim और एक कमांड लाइन इंटरफेस है कि अक्सर उपयोगी है के लिए होने समर्थन करते हैं।

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