सी/सी ++ में अप्रयुक्त कार्यों की पहचान करना

Possible Duplicate:
Finding “dead code” in a large C++ legacy application

मेरे प्रोजेक्ट में बहुत सारे सी स्रोत फाइलें हैं जिनमें से कई वैश्विक कार्यों के साथ हैं। इनमें से कई अब किसी भी कॉलर द्वारा संदर्भित नहीं हैं। क्या यह पहचानने का एक आसान तरीका है कि इनमें से कौन से फ़ंक्शंस किसी के द्वारा संदर्भित नहीं हैं?

वीसी द्वारा उत्पन्न मानचित्र फ़ाइल उपयोगी प्रतीत होती है। लेकिन मुझे यकीन नहीं है कि मानचित्र फ़ाइल में फ़ंक्शन नाम कैसे सूचीबद्ध किया गया है।

0
जोड़ा संपादित
विचारों: 1
असल में, मुझे यह जानने में दिलचस्पी है कि इस उद्देश्य के लिए वीसी लिंकर द्वारा बनाई गई मानचित्र फ़ाइल का उपयोग कैसे किया जा सकता है। (चूंकि यह स्वतंत्र रूप से उपलब्ध है)
जोड़ा लेखक JavaMan, स्रोत
संदिग्ध कार्यों के लिए कोड को मैन्युअल रूप से हटाएं और पुनः संकलित करें।
जोड़ा लेखक iammilind, स्रोत

3 उत्तर

ऐसा करने का एक सीधा लेकिन श्रमिक तरीका प्रीप्रोसेसर निर्देशों के साथ किसी भी संदिग्ध कार्यों की फ़ंक्शन घोषणा और परिभाषाओं को लपेटना है:

#if 0
void old_func();
#endif

...

#if 0
void old_func()
{
}
#endif

या यदि आप अधिक नियंत्रण रखना चाहते हैं, तो आप अपने साथ 0 और वास्तविक मैक्रो को प्रतिस्थापित कर सकते हैं, इसलिए #if 0 #ifdef NO_OLD_FUNCTIONS बन जाता है - इस तरह यह ढूंढना आसान है और एक बार जब आप खुश हों तो उन्हें बाद में चरण में बाहर ले जाएं, उनका उपयोग नहीं किया जाता है।

स्वाभाविक रूप से, आपको उस कोड और किसी भी अन्य कोड को पूरी तरह संकलित और लिंक करना होगा जो उस पर बनाता है।

0
जोड़ा
@ अहमद जोलानी: (1) आपको संदेह है कि फ़ंक्शन अप्रयुक्त है, (2) आप उपर्युक्त चरणों का पालन करते हैं (3) कंपाइलर आपको संबंधित त्रुटियां देता है या नहीं - इस प्रकार आप पता लगाते हैं क्या फ़ंक्शन का उपयोग किया जाता है या नहीं नहीं। यह एक बहुत ही सामान्य रूप से प्रयुक्त प्रक्रिया है।
जोड़ा लेखक Component 10, स्रोत
@ अहमद जोलानी: यही कारण है कि मैंने इसे 'श्रमिक' के रूप में वर्णित किया - लेकिन यह काम करता है और इसमें कोई (महंगा) उपकरण शामिल नहीं है। यह केवल कई दृष्टिकोणों में से एक है - कृपया एक और सुझाव देने के लिए स्वतंत्र महसूस करें।
जोड़ा लेखक Component 10, स्रोत
यह पता नहीं लगा रहा है, यह पूर्व-कॉन्फ़िगरिंग है और यही वह नहीं है जो पूछताछ सुनना चाहता था।
जोड़ा लेखक Ahmed Jolani, स्रोत
और यह वही है जो आप नहीं करना चाहते हैं जब आपके पास कोड की हजारों पंक्तियां हों।
जोड़ा लेखक Ahmed Jolani, स्रोत
अप्रयुक्त कार्यों का स्वचालित रूप से पता लगाने के लिए प्रोफाइलिंग का उपयोग किया जा सकता है।
जोड़ा लेखक Ahmed Jolani, स्रोत

I don't think that the map file will be of any use. If it's like other map files I've seen, it won't indicate where (if anywhere) a symbol is used—only where it is defined. What you can do is run dumpbin over your object files: dumpbin /relocations, for example, will in fact display every use of a symbol with an address which may need relocation (practically speaking, functions and variables with static lifetime). You then use your usual tools on the output to determine whether the function you are interested in is there or not. (As someone who has worked mostly on Unix, I've installed CygWin and would use grep. I'm not familiar with the native equivalents to the different Unix tools under Windows.)

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

0
जोड़ा

आप सीसीसीसी (मुफ़्त, मुक्त स्रोत) का उपयोग कर सकते हैं जो आपको अपने कार्यक्रम के बारे में बहुत सारी मीट्रिक देता है। एक और विकल्प कवरिटी (मुफ़्त नहीं) होगा।

This question may be a duplicate of this one: Dead code detection in legacy C/C++ project

0
जोड़ा