मैं सभी बड़े और पुराने कोड बेस में सभी स्थानों को खोजने की कोशिश कर रहा हूं जहां कुछ रचनाकार या कार्य कहा जाता है। विशेष रूप से, ये कुछ रचनाकार और सदस्य कार्य std::string
वर्ग (यानी, basic_string<char>
) में हैं। उदाहरण के लिए, मान लीजिए कोड की एक पंक्ति है:।मैं G ++ कोड में दिए गए सदस्य फ़ंक्शन या सीटीओआर को सभी स्थानों को कैसे ढूंढ सकता हूं?
std::string foo(fiddle->faddle(k, 9).snark);
इस उदाहरण में, यह यह है कि snark
को देखकर एक char *
है, जो कि मैं क्या कर रहा हूँ में रुचि हो सकता है स्पष्ट नहीं है
इसे हल करने के प्रयास
मैंने जीसीसी की कुछ डंप सुविधाओं को देखा है, और उनमें से कुछ उत्पन्न किए हैं, लेकिन मुझे कोई भी ऐसा नहीं मिला है जो मुझे बताएगा कि कोड की दी गई पंक्ति string
कन्स्ट्रक्टर कोपर कॉल करने के लिए कॉल करें। मैंने जनरेटेड समकक्ष असेंबली कोड को सहेजने के लिए कुछ कोड भी संकलित किए हैं। लेकिन यह दो चीजों से ग्रस्त है: फ़ंक्शन नाम "उलझन में हैं," इसलिए यह जानना असंभव है कि सी ++ शब्दों में क्या कहा जा रहा है; और किसी भी प्रकार की कोई लाइन संख्या नहीं है, इसलिए स्रोत फ़ाइल में समकक्ष जगह भी खोजना कठिन होगा।
प्रेरणा और पृष्ठभूमि
अपने प्रोजेक्ट में, हम एक बड़े, पुराने कोड HP-UX (और उनके एसीसी सी ++ संकलक) से RedHat Linux और जीसीसी/जी ++ v.4.8.5 के आधार पोर्टिंग रहे हैं । हिमाचल प्रदेश उपकरण श्रृंखला एक एक NULL
सूचक के साथ एक string
प्रारंभ करने की अनुमति दी, एक खाली स्ट्रिंग के रूप में यह इलाज। जीएनयू टूल्स 'जेनरेट कोड एक शून्य ड्रेफरेंस त्रुटि के कुछ स्वाद के साथ विफल रहता है। तो हमें इसके सभी संभावित मामलों को खोजने की जरूरत है, और उन्हें उपाय करें। (उदाहरण के लिए, NULL
की जांच करने के लिए कोड जोड़कर और ""
स्ट्रिंग के लिए पॉइंटर का उपयोग करके।)
इसलिए यदि किसी को भी मूल समस्या से निपटना पड़ा है और अन्य सुझाव भी दे सकते हैं, तो भी, स्वागत किया जाना चाहिए।
बाहर समारोह आप शायद तुम एक वैश्विक कर सकता है –
देखने के लिए कोशिश कर रहे हैं के लिए घायल नाम कार्य 'अपने स्वयं के कुछ वर्ग के लिए बदलने के लिए std :: स्ट्रिंग' और' स्ट्रिंग' खोज एवं प्रतिस्थापन उसके बाद उस संदेश को लॉग ऑन किया जाएगा जब उस विशेष कन्स्ट्रक्टर को –
कहा जाता है फ़ंक्शन का नाम बदलें/कन्स्ट्रक्टर के पैरामीटर को बदलें, सबकुछ पुनः संकलित करें, और कंपाइलर को आपके लिए ढूंढें। –