Visual Studio में C ++ फ़ाइल के लिए #include पदानुक्रम प्रदर्शित करना


169

समस्या: मेरे पास एक बड़ी विजुअल C ++ प्रोजेक्ट है जिसे मैं Visual Studio 2010 में माइग्रेट करने की कोशिश कर रहा हूं। यह विभिन्न स्रोतों और विभिन्न युगों से सामान का एक बड़ा मिश्रण है। मुझे समस्या हो रही है क्योंकि कुछ दोनों winsock.hऔर शामिल है winsock2.h

प्रश्न:#include विजुअल स्टूडियो C ++ स्रोत फ़ाइल के लिए पदानुक्रम प्रदर्शित करने के लिए कौन से उपकरण और तकनीकें हैं ?

मैं cl /Pप्रीप्रोसेसर आउटपुट प्राप्त करने के बारे में जानता हूं , लेकिन यह स्पष्ट रूप से नहीं दिखाता है कि कौन सी फ़ाइल में अन्य फाइलें शामिल हैं (और इस मामले में /Pआउटपुट 376,932 लंबी 8-8 लाइनें हैं)

एक आदर्श दुनिया में मैं उन फाइलों का एक श्रेणीबद्ध प्रदर्शन करना चाहूंगा, जिनमें अन्य फाइलें शामिल हैं, साथ ही लाइन नंबर भी हैं, ताकि मैं स्रोतों में कूद सकूं:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h

2
ऐसे लोगों के लिए जो GCC / Clang समाधान खोजते हैं, gcc -H -fsyntax-only ...पदानुक्रम को आउटपुट करने के लिए उपयोग करते हैं। करने के लिए क्रेडिट stackoverflow.com/a/18593344/427545
Lekensteyn

जवाबों:


234

एक सेटिंग है:

प्रोजेक्ट सेटिंग्स -> कॉन्फ़िगरेशन गुण -> C / C ++ -> उन्नत -> शो शामिल है

वह पेड़ पैदा करेगा। यह कंपाइलर स्विच / शोइंकल्स को मैप करता है


20
नोट: पदानुक्रम आउटपुट विंडो में देखा जा सकता है।
CannibalSmith

3
यदि किसी की रुचि: भले ही आप बजना चयन मंच टूलसेट , तब भी आप "शो में शामिल हैं" अगर आप को जोड़ने -HमेंC/C++ -> Command Line - Additional Options
WIP

3
फिर भी उतना अच्छा नहीं है जितना कि जीसीसी के "इन फीचर" से शामिल किया गया है, जो प्रत्यक्ष दिखाता है कि एक संकलन-समय त्रुटि से संबंधित पदानुक्रम शामिल है, और जो लाइन नंबर भी प्रदर्शित करता है।
पॉल

2
मैंने एक त्वरित रेगेक्स बनाया जिसमें स्ट्रिप विजुअल स्टूडियो शामिल है (प्रोग्राम फाइल्स (x86) के तहत कुछ भी)। आप नोटपैड ++ जैसे ऐप में अपने आउटपुट विंडो को कॉपी और पेस्ट कर सकते हैं और एक regex खोज कर सकते हैं और खाली जगह के साथ सभी वीएस को अपने पेड़ से शामिल कर सकते हैं:1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
kjhf

2
ध्यान दें कि जबकि / showIncludes एक व्यक्तिगत स्रोत फ़ाइल के लिए टॉगल किया जा सकता है, इसका कोई प्रभाव नहीं पड़ेगा जब तक कि परियोजना के स्तर पर / showIncludes सेट न हो।
डेविड कैर

20

कंपाइलर भी एक / showIncludes स्विच का समर्थन करता है - यह आपको लाइन नंबर नहीं देता है, लेकिन इसमें से एक बहुत व्यापक दृश्य दे सकता है जिसमें शामिल हैं।

यह प्रोजेक्ट सेटिंग्स के अंतर्गत है -> कॉन्फ़िगरेशन गुण -> C / C ++ -> उन्नत -> शो शामिल है।


+1 बहुत धन्यवाद! (लेकिन मुझे डर है कि xtofl जल्दी होने के लिए Accept हो जाता है)।
रिचीहिंडले

17

हमने इन्डेममैन को एक बहुत शक्तिशाली उपकरण पाया है। यह मुफ़्त नहीं है (लेकिन महंगा नहीं है) और इसने हमें हमारे शामिल मुद्दों की एक पकड़ प्राप्त करने और हमारे संकलन समय को 50 मिनट से 8 मिनट तक छोड़ दिया जिसमें हम शामिल नहीं थे।


5
Yow! मैं शामिल फ़ाइल पर हमलावर को दौड़ाता हूं, और इसने एक ऐसा ग्राफ तैयार किया जिससे मुझे जोर से हंसी आई। मेरी गणना से मुझे पूरी बात देखने के लिए एक 400 "मॉनिटर की आवश्यकता होगी। मुझे लगता है कि हम मदद करने के लिए इसकी शक्ति से परे हैं। 8-)
रिचीइंडल

2
अपडेट - इनकैमनेगर मूल कंपनी, प्रोफ़ैक्टर (www.profactor.co.uk) व्यवसाय से बाहर हो गई है, लेकिन उपरोक्त वेबसाइट से मुफ्त में अपनी सबसे हालिया रिलीज़ प्रदान कर रही है। नीचे की ओर यह केवल विजुअल स्टूडियो के पूर्ण संस्करणों पर VS2005 से VS2013 तक काम करता है।
दाना

5

जीसीसी के पदानुक्रमित में सुविधा शामिल नहीं है, जो त्रुटि के मामले में प्रत्यक्ष-रेखा समावेश पदानुक्रम को दर्शाता है। वीएस में "शो शामिल" विकल्प सब कुछ दिखाता है, जो डिबगिंग करते समय पदानुक्रमित फ़ाइल समस्याओं को शामिल करता है।


मैं इसके लिए पहले से ही 5 साल से इंतजार कर रहा हूं, जिसका इस्तेमाल मैंने मिंगव के साथ किया।
फंतासी

2
शायद इसका उपयोग करने के कुछ विवरण जोड़ें, जहां प्रलेखन आदि है? यह जवाब वर्तमान में बहुत कुछ नहीं जोड़ता है।
सैम ब्राइटमैन

4

यहां एक अच्छा 3rd-पार्टी, FOSS टूल है। आप एक्सएमएल पर परिणाम निर्यात कर सकते हैं, जिसमें घटनाओं की संख्या और लाइन नंबर पर डेटा शामिल होगा।


4

अब शामिल है Visual Studio के लिए एक प्लगइन, जिसे CreateeToolbox कहा जाता है । यह आपके आश्रित को सूची में शामिल कर सकता है और यादृच्छिक रिमूव जैसी अधिक चीजें कर सकता है और यह देखने के लिए संकलित करता है कि क्या सम्मिलित करना आवश्यक था।



2

cl / P को आपको लाइन नंबर दिखाना चाहिए, जैसे कि आप उस संदर्भ को बता सकते हैं कि हेडर फ़ाइल को कहाँ से शामिल किया जा रहा है।

यदि आप लाइनों के साथ ...

grep "^ # लाइन" file.i

... तो आप प्रीप्रोसेसर द्वारा क्रम में क्या फ़ाइलों का सामना किया गया था की एक बहुत साफ संकेत होना चाहिए।

यदि यह एक बंद घटना है तो यह एक बहुत जल्दी निदान होना चाहिए।


2
ज़रूर, लेकिन इससे मुझे आठ हज़ार लाइनें बिना रुके मिलती हैं, जिसमें कोई पदानुक्रम नहीं है।
रिचीइंडल

मैं काफी लंबे समय से cl / P आउटपुट के माध्यम से देख रहा था, और सोच रहा था कि क्या नौकरी के लिए बेहतर उपकरण है। अब मुझे पता चला है कि वहाँ है, जो महान है। सवाल है सामान्य, और जवाब इतने पर यहाँ हमेशा के लिए होगा, दूसरों को खोजने के लिए।
रिचीहिंडले

0

मैं Doxygen और GraphViz का उपयोग करता हूं

यहां छवि विवरण दर्ज करें

दोनों को स्थापित करें। पदानुक्रम आरेख उत्पन्न करने के उपकरण के रूप में GraphViz का चयन करना सुनिश्चित करें। "ग्राफविक्स पैकेज से डॉट टूल का उपयोग करें" चुनें।

इसके अलावा अपने PATH पर्यावरण चर में GraphViz से द्विआधारी निर्देशिका को शामिल करना सुनिश्चित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.