C/C ++ তে অব্যবহৃত কার্যাবলী সনাক্ত করা

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.)

এটি মোটামুটি সহজ হবে (Python ব্যবহার করে, অথবা কিছু অনুরূপ স্ক্রিপ্টিং ভাষা) একটি ছোট স্ক্রিপ্ট লিখতে যা উত্পাদন আউটপুট পার্শ্বে হবে ডাম্পবিন/চিহ্ন আপনার প্রতিটি বস্তুর ফাইলগুলির জন্য, নামগুলি পেতে আপনি সংজ্ঞায়িত সমস্ত ফাংশন, তারপর ডাম্পবিনের আউটপুট প্যাড / relocations আপনাকে যে ফাংশনগুলি ব্যবহার করে তার একটি তালিকা দিতে এবং অবশেষে দুই পার্থক্য কি (মাইক্রোসফট তাদের বাইরে চলে গেছে বলে মনে হয় ব্যবহার করার জন্য ডাম্পবিন এর আউটপুট তৈরির উপায়, কিন্তু এটি এখনও নয় যে কঠিন; আপনি শুধুমাত্র যা লাইন উপেক্ষা করতে হবে।)

0
যোগ

আপনি CCCC (বিনামূল্যে, ওপেনসোর্স) ব্যবহার করতে পারেন যা আপনাকে আপনার প্রোগ্রাম সম্পর্কে প্রচুর পরিমান দেয়। আরেকটি বিকল্প হবে কভারিটাইটি (বিনামূল্যে নয়)।

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

0
যোগ