এটি হল aarch64-linux-gnu-gcov কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।
কার্যক্রম:
NAME এর
gcov - কভারেজ পরীক্ষার টুল
সাইনোপিসিস
gcov [-v|--সংস্করণ] [-h|--help]
[-a|--সমস্ত ব্লক]
[-b|--শাখা-সম্ভাবনা]
[-c|--শাখা-গণনা]
[-d|-- প্রদর্শন-প্রগতি]
[-f|--ফাংশন-সারাংশ]
[-i|-- মধ্যবর্তী বিন্যাস]
[-l|--লং-ফাইল-নাম]
[-m|--বিকৃত-নাম]
[-n|--নো-আউটপুট]
[-o|--অবজেক্ট-ডিরেক্টরি ডিরেক্টরি|ফাইল]
[-p|--সংরক্ষণ-পথ]
[-r|-- শুধুমাত্র আপেক্ষিক]
[-s|--উৎস-উপসর্গ ডিরেক্টরি]
[-u|--নিঃশর্ত-শাখা]
নথি পত্র
বর্ণনাঃ
gcov একটি পরীক্ষা কভারেজ প্রোগ্রাম. আপনার প্রোগ্রামগুলি বিশ্লেষণ করতে GCC এর সাথে কনসার্টে এটি ব্যবহার করুন
আরও দক্ষ, দ্রুত চলমান কোড তৈরি করতে এবং আপনার অপরীক্ষিত অংশগুলি আবিষ্কার করতে সহায়তা করুন
কার্যক্রম. তুমি ব্যবহার করতে পার gcov আপনার অপ্টিমাইজেশন কোথায় তা আবিষ্কার করতে সাহায্য করার জন্য একটি প্রোফাইলিং টুল হিসাবে
প্রচেষ্টা আপনার কোডকে সবচেয়ে ভালোভাবে প্রভাবিত করবে। আপনিও ব্যবহার করতে পারেন gcov অন্যান্য প্রোফাইলিং বরাবর
টুল, জিপিআরএফ, আপনার কোডের কোন অংশগুলি সর্বাধিক কম্পিউটিং সময় ব্যবহার করে তা মূল্যায়ন করতে।
প্রোফাইলিং টুল আপনাকে আপনার কোডের কর্মক্ষমতা বিশ্লেষণ করতে সাহায্য করে। যেমন একটি প্রোফাইলার ব্যবহার করে gcov
or জিপিআরএফ, আপনি কিছু মৌলিক কর্মক্ষমতা পরিসংখ্যান খুঁজে পেতে পারেন, যেমন:
* কোডের প্রতিটি লাইন কত ঘন ঘন কার্যকর করে
* কোডের লাইনগুলি আসলে কার্যকর করা হয়
* কোডের প্রতিটি বিভাগ কত কম্পিউটিং সময় ব্যবহার করে
আপনার কোড কম্পাইল করার সময় কীভাবে কাজ করে সে সম্পর্কে আপনি এই জিনিসগুলি জানলে, আপনি প্রতিটি দেখতে পারেন
কোন মডিউল অপ্টিমাইজ করা উচিত তা দেখতে মডিউল। gcov আপনাকে কোথায় কাজ করতে হবে তা নির্ধারণ করতে সহায়তা করে
অপ্টিমাইজেশান উপর.
সফ্টওয়্যার বিকাশকারীরাও নিশ্চিত করতে টেস্টসুইটের সাথে কনসার্টে কভারেজ টেস্টিং ব্যবহার করে
সফ্টওয়্যার আসলে একটি রিলিজ জন্য যথেষ্ট ভাল. Testsuites যাচাই করতে পারেন যে একটি প্রোগ্রাম
প্রত্যাশিত হিসাবে কাজ করে; একটি কভারেজ প্রোগ্রাম পরীক্ষা করে যে প্রোগ্রামটির কতটা ব্যবহার করা হয়
টেস্টসুইট বিকাশকারীরা তখন নির্ধারণ করতে পারে যে কী ধরণের পরীক্ষার ক্ষেত্রে যুক্ত করা দরকার
testsuites ভাল পরীক্ষা এবং একটি ভাল চূড়ান্ত পণ্য উভয় তৈরি করতে.
আপনি যদি ব্যবহার করার পরিকল্পনা করেন তবে অপ্টিমাইজেশান ছাড়াই আপনার কোড কম্পাইল করা উচিত gcov কারন
অপ্টিমাইজেশান, কোডের কিছু লাইনকে একটি ফাংশনে একত্রিত করে, আপনাকে ততটা নাও দিতে পারে
তথ্য যেমন আপনাকে `হট স্পট' সন্ধান করতে হবে যেখানে কোডটি প্রচুর পরিমাণে ব্যবহার করছে
কম্পিউটার সময়। একইভাবে, কারণ gcov লাইন দ্বারা পরিসংখ্যান জমা করে (সর্বনিম্ন
রেজোলিউশন), এটি একটি প্রোগ্রামিং শৈলীর সাথে সর্বোত্তম কাজ করে যা প্রতিটিতে শুধুমাত্র একটি বিবৃতি রাখে
লাইন আপনি যদি জটিল ম্যাক্রো ব্যবহার করেন যা লুপ বা অন্যান্য নিয়ন্ত্রণ কাঠামোতে প্রসারিত হয়,
পরিসংখ্যান কম সহায়ক---তারা শুধুমাত্র সেই লাইনে রিপোর্ট করে যেখানে ম্যাক্রো কল হয়
প্রদর্শিত যদি আপনার জটিল ম্যাক্রোগুলি ফাংশনের মতো আচরণ করে তবে আপনি তাদের ইনলাইন দিয়ে প্রতিস্থাপন করতে পারেন
এই সমস্যা সমাধানের জন্য ফাংশন।
gcov নামে একটি লগফাইল তৈরি করে sourcefile.gcov যা নির্দেশ করে প্রতিটি লাইনের কতবার
একটি উৎস ফাইল sourcefile.c মৃত্যুদন্ড কার্যকর করেছে। আপনি বরাবর এই logfiles ব্যবহার করতে পারেন জিপিআরএফ থেকে
আপনার প্রোগ্রামের কর্মক্ষমতা সূক্ষ্ম-টিউনিং সাহায্য. জিপিআরএফ সময় তথ্য দেয়
আপনার কাছ থেকে পাওয়া তথ্য সহ ব্যবহার করতে পারেন gcov.
gcov শুধুমাত্র GCC এর সাথে সংকলিত কোডে কাজ করে। এটি অন্য কোনো প্রোফাইলিংয়ের সাথে সামঞ্জস্যপূর্ণ নয়
বা পরীক্ষার কভারেজ প্রক্রিয়া।
বিকল্প
-h
--help
ব্যবহার সম্পর্কে সাহায্য প্রদর্শন করুন gcov (স্ট্যান্ডার্ড আউটপুটে), এবং কোনো কাজ না করে প্রস্থান করুন
আরও প্রক্রিয়াকরণের.
-v
--সংস্করণ
প্রদর্শন gcov সংস্করণ নম্বর (স্ট্যান্ডার্ড আউটপুটে), এবং কোনো কিছু না করে প্রস্থান করুন
আরও প্রক্রিয়াকরণের.
-a
--সমস্ত ব্লক
প্রতিটি মৌলিক ব্লকের জন্য পৃথক মৃত্যুদন্ডের সংখ্যা লিখুন। সাধারণত gcov আউটপুট
এক্সিকিউশন শুধুমাত্র একটি লাইনের প্রধান ব্লকের জন্য গণনা করা হয়। এই বিকল্প দিয়ে আপনি করতে পারেন
একক লাইনের মধ্যে ব্লকগুলি কার্যকর করা হচ্ছে না তা নির্ধারণ করুন।
-b
--শাখা-সম্ভাবনা
আউটপুট ফাইলে শাখা ফ্রিকোয়েন্সি লিখুন এবং শাখার সারাংশের তথ্য লিখুন
স্ট্যান্ডার্ড আউটপুট। এই বিকল্পটি আপনাকে আপনার প্রোগ্রামের প্রতিটি শাখা কত ঘন ঘন দেখতে দেয়
নিয়ে যাওয়া হয়. শর্তহীন শাখা দেখানো হবে না, যদি না -u অপশন দেওয়া হয়।
-c
--শাখা-গণনা
শাখার ফ্রিকোয়েন্সিগুলি শতকরার পরিবর্তে নেওয়া শাখার সংখ্যা হিসাবে লিখুন
নেওয়া শাখা.
-n
--নো-আউটপুট
তৈরি করবেন না gcov আউটপুট ফাইল.
-l
--লং-ফাইল-নাম
অন্তর্ভুক্ত উৎস ফাইলের জন্য দীর্ঘ ফাইল নাম তৈরি করুন. উদাহরণস্বরূপ, যদি হেডার ফাইল xh
কোড রয়েছে এবং ফাইলটিতে অন্তর্ভুক্ত ছিল এসি, তারপর চলমান gcov ফাইলে এসি
নামে একটি আউটপুট ফাইল তৈরি করবে ac##xhgcov পরিবর্তে xhgcov। এটা হতে পারে
দরকারী যদি xh একাধিক সোর্স ফাইলে অন্তর্ভুক্ত করা হয়েছে এবং আপনি ব্যক্তিটিকে দেখতে চান
অবদানসমূহ. আপনি যদি ব্যবহার করেন -p বিকল্প, অন্তর্ভুক্ত এবং অন্তর্ভুক্ত উভয় ফাইলের নাম
সম্পূর্ণ পথের নাম হবে।
-p
--সংরক্ষণ-পথ
উত্পন্ন নামে সম্পূর্ণ পথ তথ্য সংরক্ষণ করুন .gcov নথি পত্র. ছাড়া
এই বিকল্পটি, শুধুমাত্র ফাইলের নাম উপাদান ব্যবহার করা হয়। এই বিকল্পের সাথে, সমস্ত ডিরেক্টরি
ব্যবহার করা হয়, সঙ্গে / অক্ষর অনুবাদ করা হয়েছে # চরিত্র, . ডিরেক্টরি উপাদান সরানো
এবং অপসারণযোগ্য .. উপাদানের নাম পরিবর্তন করা হয়েছে ^. সোর্সফাইলগুলি থাকলে এটি কার্যকর
বিভিন্ন ডিরেক্টরি।
-r
-- শুধুমাত্র আপেক্ষিক
একটি আপেক্ষিক পাথনাম সহ উত্স ফাইল সম্পর্কে শুধুমাত্র আউটপুট তথ্য (উৎস পরে
উপসর্গ elision)। পরম পাথ সাধারণত সিস্টেম হেডার ফাইল এবং কোনো কভারেজ হয়
সেখানে ইনলাইন ফাংশন সাধারণত অরুচিকর।
-f
--ফাংশন-সারাংশ
ফাইল স্তরের সারাংশ ছাড়াও প্রতিটি ফাংশনের জন্য আউটপুট সারাংশ।
-o ডিরেক্টরি|ফাইল
--অবজেক্ট-ডিরেক্টরি ডিরেক্টরি
--অবজেক্ট-ফাইল ফাইল
হয় gcov ডেটা ফাইল ধারণকারী ডিরেক্টরি, অথবা অবজেক্ট পাথের নাম উল্লেখ করুন।
সার্জারির .gcno, এবং .gcda এই বিকল্পটি ব্যবহার করার জন্য ডেটা ফাইলগুলি অনুসন্ধান করা হয়। যদি একটি ডিরেক্টরি হয়
নির্দিষ্ট করা হয়েছে, ডেটা ফাইলগুলি সেই ডিরেক্টরিতে রয়েছে এবং ইনপুট ফাইলের নাম অনুসারে নামকরণ করা হয়েছে,
এর এক্সটেনশন ছাড়াই। যদি একটি ফাইল এখানে নির্দিষ্ট করা হয়, তাহলে ডেটা ফাইলগুলির নামকরণ করা হয়
যে ফাইল, তার এক্সটেনশন ছাড়া.
-s ডিরেক্টরি
--উৎস-উপসর্গ ডিরেক্টরি
আউটপুট কভারেজ ফাইল তৈরি করার সময় সরানোর জন্য উৎস ফাইলের নামের জন্য একটি উপসর্গ।
একটি পৃথক ডিরেক্টরি তৈরি করার সময় এই বিকল্পটি উপযোগী, এবং এর পাথনাম
আউটপুট ফাইলের নাম নির্ধারণ করার সময় উত্স ডিরেক্টরিটি চাওয়া হয় না। উল্লেখ্য যে এই
উৎস ফাইলটি পরম কিনা তা নির্ধারণ করার আগে উপসর্গ সনাক্তকরণ প্রয়োগ করা হয়।
-u
--নিঃশর্ত-শাখা
যখন শাখার সম্ভাব্যতা দেওয়া হয়, তখন শর্তহীন শাখাগুলির অন্তর্ভুক্ত করুন।
শর্তহীন শাখাগুলি সাধারণত আকর্ষণীয় হয় না।
-d
-- প্রদর্শন-প্রগতি
স্ট্যান্ডার্ড আউটপুটে অগ্রগতি প্রদর্শন করুন।
-i
-- মধ্যবর্তী বিন্যাস
আউটপুট gcov ফাইল একটি সহজ-থেকে-পার্স মধ্যবর্তী পাঠ্য বিন্যাসে যা দ্বারা ব্যবহার করা যেতে পারে lcov
বা অন্যান্য সরঞ্জাম। আউটপুট একক .gcov ফাইল প্রতি .gcda ফাইল কোন সোর্স কোড নেই
প্রয়োজন।
ইন্টারমিডিয়েটের বিন্যাস .gcov ফাইলটি প্রতি লাইনে একটি এন্ট্রি সহ সাধারণ পাঠ্য
ফাইল:
ফাংশন: , ,
গণনা: ,
শাখা: ,
যেখানে হয়
notexec (শাখা কার্যকর করা হয়নি)
নেওয়া (শাখা কার্যকর করা এবং নেওয়া)
nottaken (শাখা কার্যকর করা হয়েছে, কিন্তু নেওয়া হয়নি)
একাধিক হতে পারে একটি মধ্যবর্তী gcov এ এন্ট্রি
ফাইল একটি অনুসরণ সমস্ত এন্ট্রি সেই উৎস ফাইলের সাথে সম্পর্কিত
পরের পর্যন্ত প্রবেশ
এখানে একটি নমুনা যখন -i সাথে ব্যবহার করা হয় -b বিকল্প:
ফাইল:array.cc
ফাংশন:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
ফাংশন: 22,1, প্রধান
সংখ্যা: 11,1
সংখ্যা: 12,1
সংখ্যা: 14,1
শাখা: 14, নেওয়া
সংখ্যা: 26,1
শাখা: 28, নোট করা হয়নি
-m
--বিকৃত-নাম
আউটপুটে বিকৃত ফাংশনের নাম প্রদর্শন করুন। ডিফল্ট হল ম্যাংগ্ল্ড ফাংশন দেখানো
নাম থাকবে না।
gcov বর্তমান ডিরেক্টরির সাথে একইভাবে চালানো উচিত যখন আপনি আহ্বান করেছিলেন
কম্পাইলার অন্যথায় এটি উত্স ফাইলগুলি সনাক্ত করতে সক্ষম হবে না। gcov ফাইল তৈরি করে
নামক mangledname.gcov বর্তমান ডিরেক্টরিতে। এই কভারেজ তথ্য আছে
তারা সংশ্লিষ্ট উৎস ফাইলের. এক .gcov ফাইল প্রতিটি উৎসের জন্য উত্পাদিত হয় (বা
শিরোনাম) কোড ধারণকারী ফাইল, যা ডেটা ফাইল তৈরি করতে কম্পাইল করা হয়েছিল। দ্য
mangledname আউটপুট ফাইল নামের অংশ সাধারণত শুধুমাত্র উৎস ফাইলের নাম, কিন্তু পারেন
যদি আরো জটিল কিছু হতে -l or -p অপশন দেওয়া হয়। ঐ অপশন পড়ুন
বিস্তারিত জানার জন্য.
আপনি যদি আহ্বান gcov একাধিক ইনপুট ফাইল সহ, প্রতিটি ইনপুট ফাইল থেকে অবদানগুলি হল৷
সমষ্টি সাধারণত আপনি চূড়ান্ত লিঙ্কের মতো ফাইলগুলির একই তালিকার সাথে এটিকে আহ্বান করবেন
আপনার নির্বাহযোগ্য।
সার্জারির .gcov ফাইল ধারণ করে : প্রোগ্রাম সোর্স কোড সহ পৃথক ক্ষেত্র। বিন্যাস
is
: :
কমান্ড লাইন বিকল্প দ্বারা অনুরোধ করা হলে অতিরিক্ত ব্লক তথ্য প্রতিটি লাইন সফল হতে পারে।
সার্জারির মৃত্যুদন্ড_গণনা is - কোন কোড ধারণকারী লাইন জন্য. অকার্যকর লাইন চিহ্নিত করা হয় #####
or ====, তারা অ-ব্যতিক্রমী পাথ বা শুধুমাত্র দ্বারা পৌঁছানো যায় কিনা তার উপর নির্ভর করে
ব্যতিক্রমী পাথ যেমন C++ ব্যতিক্রম হ্যান্ডলার, যথাক্রমে।
শুরুতেই কিছু তথ্য আছে লাইন সংখ্যা শূন্য এই প্রস্তাবনা লাইন হয়
ফর্মের
-:0: :
এই প্রস্তাবনা লাইনের ক্রম এবং সংখ্যা হিসাবে বর্ধিত করা হবে gcov উন্নয়ন
অগ্রগতি --- অপরিবর্তিত থাকা তাদের উপর নির্ভর করবেন না। ব্যবহার করুন ট্যাগ একটি নির্দিষ্ট সনাক্ত করতে
প্রস্তাবনা লাইন।
অতিরিক্ত ব্লক তথ্য ফর্ম
সার্জারির তথ্য মানুষের পঠনযোগ্য, কিন্তু মেশিন পার্সিংয়ের জন্য যথেষ্ট সহজ হওয়ার জন্য ডিজাইন করা হয়েছে
খুব.
শতাংশ মুদ্রণ করার সময়, মানগুলি থাকলে 0% এবং 100% শুধুমাত্র মুদ্রিত হয় ঠিক 0% এবং
যথাক্রমে 100%। অন্যান্য মান যা প্রচলিতভাবে 0% বা 100% এ বৃত্তাকার হবে
পরিবর্তে নিকটতম অ-সীমানা মান হিসাবে মুদ্রিত।
ব্যবহার করার সময় gcov, আপনাকে প্রথমে দুটি বিশেষ GCC বিকল্পের সাথে আপনার প্রোগ্রাম কম্পাইল করতে হবে:
-এফপ্রোফাইল-আর্কস -সবচেয়ে কভারেজ. এটি কম্পাইলারকে অতিরিক্ত তৈরি করতে বলে
gcov দ্বারা প্রয়োজনীয় তথ্য (মূলত প্রোগ্রামের একটি ফ্লো গ্রাফ) এবং অন্তর্ভুক্ত
প্রয়োজনীয় অতিরিক্ত প্রোফাইলিং তথ্য তৈরি করার জন্য অবজেক্ট ফাইলগুলিতে অতিরিক্ত কোড
gcov দ্বারা। এই অতিরিক্ত ফাইলগুলি ডিরেক্টরিতে স্থাপন করা হয় যেখানে অবজেক্ট ফাইলটি রয়েছে
অবস্থিত।
প্রোগ্রামটি চালানোর ফলে প্রোফাইল আউটপুট তৈরি হবে। প্রতিটি উৎস ফাইলের জন্য
সঙ্গে সংকলিত -এফপ্রোফাইল-আর্কস, একটি সহচর .gcda ফাইলটি অবজেক্ট ফাইলে স্থাপন করা হবে
ডিরেক্টরি.
চলমান gcov আর্গুমেন্ট হিসাবে আপনার প্রোগ্রামের সোর্স ফাইলের নাম দিয়ে এখন একটি তালিকা তৈরি করবে
প্রতিটি লাইনের জন্য এক্সিকিউশনের ফ্রিকোয়েন্সি সহ কোডের। উদাহরণস্বরূপ, যদি আপনার প্রোগ্রাম
বলা হয় tmp.c, আপনি যখন মৌলিক ব্যবহার করেন তখন আপনি এটি দেখতে পান gcov সুবিধা:
$ gcc -fprofile-arcs -ftest-coverage tmp.c
$a.out
$gcov tmp.c
tmp.c ফাইলে 90.00টি উৎস লাইনের 10% নির্বাহ করা হয়েছে
tmp.c.gcov তৈরি করা হচ্ছে।
ফাইল tmp.c.gcov থেকে আউটপুট রয়েছে gcov। এখানে একটি নমুনা:
-: 0:সূত্র:tmp.c
-: 0:গ্রাফ:tmp.gcno
-: 0:ডেটা:tmp.gcda
-: 0:রান:1
-: 0:প্রোগ্রাম:1
-: 1:#অন্তর্ভুক্ত
-: 2:
-: 3: int প্রধান (অকার্যকর)
১:৪:{
1: 5: int i, মোট;
-: 6:
1: 7: মোট = 0;
-: 8:
11: 9: জন্য (i = 0; i < 10; i++)
10: 10: মোট += i;
-: 11:
1: 12: যদি (মোট!= 45)
#####: 13: printf ("ব্যর্থতা\n");
-: 14: অন্য
1: 15: printf ("সফল\n");
1: 16: ফেরত 0;
-: 17:}
আপনি যখন ব্যবহার -a বিকল্প, আপনি পৃথক ব্লক গণনা পাবেন, এবং আউটপুট দেখায়
এটার মত:
-: 0:সূত্র:tmp.c
-: 0:গ্রাফ:tmp.gcno
-: 0:ডেটা:tmp.gcda
-: 0:রান:1
-: 0:প্রোগ্রাম:1
-: 1:#অন্তর্ভুক্ত
-: 2:
-: 3: int প্রধান (অকার্যকর)
১:৪:{
1: 4-ব্লক 0
1: 5: int i, মোট;
-: 6:
1: 7: মোট = 0;
-: 8:
11: 9: জন্য (i = 0; i < 10; i++)
11: 9-ব্লক 0
10: 10: মোট += i;
10: 10-ব্লক 0
-: 11:
1: 12: যদি (মোট!= 45)
1: 12-ব্লক 0
#####: 13: printf ("ব্যর্থতা\n");
$$$$$: 13-ব্লক 0
-: 14: অন্য
1: 15: printf ("সফল\n");
1: 15-ব্লক 0
1: 16: ফেরত 0;
1: 16-ব্লক 0
-: 17:}
এই মোডে, প্রতিটি মৌলিক ব্লক শুধুমাত্র একটি লাইনে দেখানো হয় -- ব্লকের শেষ লাইন। ক
মাল্টি-লাইন ব্লক শুধুমাত্র সেই শেষ লাইনের এক্সিকিউশন কাউন্টে অবদান রাখবে এবং অন্যান্য
লাইনগুলি কোড ধারণ করে দেখানো হবে না, যদি না পূর্ববর্তী ব্লকগুলি সেই লাইনগুলিতে শেষ হয়। দ্য
একটি লাইনের মোট এক্সিকিউশন কাউন্ট দেখানো হয় এবং পরবর্তী লাইনগুলো এক্সিকিউশন কাউন্ট দেখায়
সেই লাইনে শেষ হওয়া পৃথক ব্লকের জন্য। প্রতিটি ব্লকের পরে, শাখা এবং কল গণনা
ব্লক দেখানো হবে, যদি -b অপশন দেওয়া হয়।
GCC ইন্সট্রুমেন্টগুলি যেভাবে কল করে তার কারণে, নম্বর সহ একটি লাইনের পরে একটি কল গণনা দেখানো যেতে পারে
পৃথক ব্লক। আপনি দেখতে পাচ্ছেন, লাইন 13 এ একটি মৌলিক ব্লক রয়েছে যা কার্যকর করা হয়নি।
আপনি যখন ব্যবহার -b বিকল্প, আপনার আউটপুট এই মত দেখায়:
$gcov -b tmp.c
tmp.c ফাইলে 90.00টি উৎস লাইনের 10% নির্বাহ করা হয়েছে
tmp.c ফাইলে 80.00টি শাখার 5% এক্সিকিউট করা হয়েছে
80.00টি শাখার 5% টিএমপি.সি ফাইলে অন্তত একবার নেওয়া হয়েছে
tmp.c ফাইলে 50.00টি কলের 2% নির্বাহ করা হয়েছে
tmp.c.gcov তৈরি করা হচ্ছে।
এখানে একটি ফলাফলের একটি নমুনা আছে tmp.c.gcov ফাইল:
-: 0:সূত্র:tmp.c
-: 0:গ্রাফ:tmp.gcno
-: 0:ডেটা:tmp.gcda
-: 0:রান:1
-: 0:প্রোগ্রাম:1
-: 1:#অন্তর্ভুক্ত
-: 2:
-: 3: int প্রধান (অকার্যকর)
ফাংশন মেইন নামক 1 রিটার্ন করেছে 1 ব্লক এক্সিকিউট হয়েছে 75%
১:৪:{
1: 5: int i, মোট;
-: 6:
1: 7: মোট = 0;
-: 8:
11: 9: জন্য (i = 0; i < 10; i++)
শাখা 0 নেওয়া হয়েছে 91% (ফলথ্রু)
শাখা 1 নেওয়া হয়েছে 9%
10: 10: মোট += i;
-: 11:
1: 12: যদি (মোট!= 45)
শাখা 0 নেওয়া হয়েছে 0% (ফলথ্রু)
শাখা 1 নেওয়া হয়েছে 100%
#####: 13: printf ("ব্যর্থতা\n");
কল 0 কখনই কার্যকর করা হয়নি
-: 14: অন্য
1: 15: printf ("সফল\n");
কল 0 1 কল 100% ফিরে এসেছে
1: 16: ফেরত 0;
-: 17:}
প্রতিটি ফাংশনের জন্য, একটি লাইন প্রিন্ট করা হয় যে ফাংশনটি কতবার কল করা হয়, কিভাবে
অনেক সময় এটি ফেরত দেয় এবং ফাংশনের ব্লকের কত শতাংশ কার্যকর করা হয়েছিল।
প্রতিটি মৌলিক ব্লকের জন্য, মৌলিক ব্লকের বর্ণনার শেষ লাইনের পরে একটি লাইন মুদ্রিত হয়
শাখা বা কল যা মৌলিক ব্লক শেষ করে। একাধিক শাখা এবং কল হতে পারে
একটি একক উৎস লাইনের জন্য তালিকাভুক্ত যদি একাধিক মৌলিক ব্লক থাকে যা সেই লাইনে শেষ হয়।
এই ক্ষেত্রে, শাখা এবং কল প্রতিটি একটি নম্বর দেওয়া হয়. কোন সহজ উপায় নেই
এই শাখাগুলিকে ম্যাপ করুন এবং উত্স নির্মাণে ফিরে কল করুন। সাধারণভাবে, যদিও, সর্বনিম্ন
নম্বরযুক্ত শাখা বা কল সোর্স লাইনের বামদিকের নির্মাণের সাথে মিলে যাবে।
একটি শাখার জন্য, যদি এটি অন্তত একবার কার্যকর করা হয়, তাহলে একটি শতাংশ সংখ্যা নির্দেশ করে
কতবার শাখা নেওয়া হয়েছিল তার সংখ্যা দিয়ে ভাগ করে কতবার শাখা কার্যকর করা হবে
মুদ্রিত অন্যথায়, "কখনও কার্যকর করা হয়নি" বার্তাটি মুদ্রিত হয়।
একটি কলের জন্য, যদি এটি অন্তত একবার কার্যকর করা হয়, তাহলে একটি শতাংশ সংখ্যা নির্দেশ করে
কল রিটার্ন করা বারকে কতবার কল করা হয়েছিল তার সংখ্যা দিয়ে ভাগ করা হবে
মুদ্রিত এটি সাধারণত 100% হবে, কিন্তু "প্রস্থান" বা কল করে এমন ফাংশনগুলির জন্য কম হতে পারে
"longjmp", এবং এইভাবে প্রতিবার কল করা হলে ফিরে নাও যেতে পারে।
মৃত্যুদণ্ডের সংখ্যা ক্রমবর্ধমান। যদি উদাহরণ প্রোগ্রাম ছাড়া আবার মৃত্যুদন্ড কার্যকর করা হয়
অপসারণ .gcda ফাইল, উৎসের প্রতিটি লাইনের সংখ্যা কতবার ছিল
সম্পাদিত পূর্ববর্তী রান(গুলি) এর ফলাফলে যোগ করা হবে। এই সম্ভাব্য দরকারী
বিভিন্ন উপায়ে। উদাহরণস্বরূপ, এটি একটি সংখ্যার উপর ডেটা জমা করতে ব্যবহার করা যেতে পারে
প্রোগ্রামটি একটি পরীক্ষা যাচাইকরণ স্যুটের অংশ হিসাবে বা আরও সঠিক দীর্ঘমেয়াদী প্রদানের জন্য চলে
প্রোগ্রাম রান একটি বড় সংখ্যা উপর তথ্য.
তথ্য .gcda প্রোগ্রাম প্রস্থান করার সাথে সাথে ফাইলগুলি সংরক্ষণ করা হয়। প্রতিটির জন্য, প্রত্যেকটির জন্য
সোর্স ফাইলের সাথে সংকলিত -এফপ্রোফাইল-আর্কস, প্রোফাইলিং কোড প্রথমে একটি পড়ার চেষ্টা করে
বিদ্যমান .gcda ফাইল যদি ফাইলটি এক্সিকিউটেবলের সাথে মেলে না (মৌলিকের ভিন্ন সংখ্যা
ব্লক গণনা) এটি ফাইলের বিষয়বস্তু উপেক্ষা করবে। এটি তারপর নতুন মৃত্যুদন্ড যোগ করা হয়
গণনা করে এবং অবশেষে ফাইলে ডেটা লেখে।
ব্যবহার gcov সঙ্গে জিসিসি অপ্টিমাইজেশান
আপনি যদি ব্যবহার করার পরিকল্পনা করেন gcov আপনার কোড অপ্টিমাইজ করতে সাহায্য করার জন্য, আপনাকে প্রথমে আপনার প্রোগ্রাম কম্পাইল করতে হবে
দুটি বিশেষ GCC বিকল্প সহ: -এফপ্রোফাইল-আর্কস -সবচেয়ে কভারেজ. যে বাদে, আপনি পারেন
অন্য কোন GCC বিকল্প ব্যবহার করুন; কিন্তু আপনি যদি প্রমাণ করতে চান যে আপনার প্রোগ্রামের প্রতিটি একক লাইন
মৃত্যুদন্ড কার্যকর করা হয়েছিল, আপনার একই সময়ে অপ্টিমাইজেশানের সাথে কম্পাইল করা উচিত নয়। কিছু মেশিনে
অপ্টিমাইজার অন্যান্য লাইনের সাথে তাদের একত্রিত করে কিছু সাধারণ কোড লাইন বাদ দিতে পারে।
উদাহরণস্বরূপ, এই মত কোড:
যদি (a!= b)
c = 1;
আর
c = 0;
কিছু মেশিনে একটি নির্দেশে কম্পাইল করা যেতে পারে। এই ক্ষেত্রে, জন্য কোন উপায় নেই
gcov প্রতিটি লাইনের জন্য পৃথক এক্সিকিউশন গণনা গণনা করতে কারণ আলাদা নেই
প্রতিটি লাইনের জন্য কোড। অত: পর gcov আপনি প্রোগ্রাম কম্পাইল যদি আউটপুট এই মত দেখায়
অপ্টিমাইজেশান সহ:
100: 12: যদি (a != b)
100: 13: c = 1;
100: 14: অন্য
100: 15: c = 0;
আউটপুট দেখায় যে কোডের এই ব্লক, অপ্টিমাইজেশান দ্বারা মিলিত, 100 বার কার্যকর করা হয়েছে।
এক অর্থে এই ফলাফলটি সঠিক, কারণ সেখানে শুধুমাত্র একটি নির্দেশনা ছিল
এই চারটি লাইন। যাইহোক, আউটপুট কতবার ফলাফল নির্দেশ করে না
0 ছিল এবং কতবার ফলাফল 1 ছিল।
ইনলাইনেবল ফাংশন অপ্রত্যাশিত লাইন গণনা তৈরি করতে পারে। লাইন গণনা জন্য দেখানো হয়
ইনলাইনেবল ফাংশনের সোর্স কোড, কিন্তু যা দেখানো হয়েছে তা নির্ভর করে ফাংশনটি কোথায় তার উপর
ইনলাইনযুক্ত, বা যদি এটি একেবারেই ইনলাইন না হয়।
ফাংশন ইনলাইন না থাকলে, কম্পাইলারকে অবশ্যই এর একটি আউট অফ লাইন কপি নির্গত করতে হবে
ফাংশন, যেকোন অবজেক্ট ফাইলে যার প্রয়োজন। যদি fileA.o এবং ফাইলবিও উভয় ধারণ আউট
একটি নির্দিষ্ট ইনলাইনেবল ফাংশনের লাইন বডি, তারা উভয়ই কভারেজ ধারণ করবে
যে ফাংশন জন্য গণনা. কখন fileA.o এবং ফাইলবিও একসাথে লিঙ্ক করা হয়, লিঙ্কার করবে,
অনেক সিস্টেমে, সেই ফাংশনে সমস্ত কলের জন্য লাইনের বাইরের বডিগুলির মধ্যে একটি নির্বাচন করুন,
এবং অন্যটিকে সরান বা উপেক্ষা করুন। দুর্ভাগ্যবশত, এটি কভারেজ কাউন্টারগুলিকে সরিয়ে দেবে না
অব্যবহৃত ফাংশন শরীরের জন্য. অত:পর যখন instrumented, যে ফাংশন একটি ব্যবহার ছাড়া সব
শূন্য গণনা দেখাবে।
যদি ফাংশনটি বেশ কয়েকটি জায়গায় ইনলাইন করা হয়, তবে প্রতিটি অবস্থানে ব্লক গঠন হতে পারে
একই হতে হবে না উদাহরণস্বরূপ, একটি শর্ত এখন কম্পাইল সময়ে গণনাযোগ্য হতে পারে
কিছু দৃষ্টান্ত কারণ ইনলাইন ফাংশনের সকল ব্যবহারের কভারেজ দেখানো হবে
একই উৎস লাইনের জন্য, লাইন গণনাগুলি নিজেদেরকে অসঙ্গত বলে মনে হতে পারে।
দীর্ঘমেয়াদী অ্যাপ্লিকেশনগুলি "_gcov_reset" এবং "_gcov_dump" সুবিধাগুলি ব্যবহার করতে পারে
আগ্রহের প্রোগ্রাম অঞ্চলে প্রোফাইল সংগ্রহ সীমাবদ্ধ করুন। "_gcov_reset(void)" কল করা হচ্ছে
সমস্ত প্রোফাইল কাউন্টারকে শূন্যে সাফ করবে এবং "_gcov_dump(void)" কল করলে
যে সময়ে সংগ্রহ করা প্রোফাইল তথ্য ডাম্প করা হবে .gcda আউটপুট ফাইল।
onworks.net পরিষেবা ব্যবহার করে অনলাইনে aarch64-linux-gnu-gcov ব্যবহার করুন