حكومة غوف

Gcov هي أداة لتحليل تغطية الكود المصدري وتحديد خصائص كل عبارة على حدة . تُنشئ Gcov إحصاءات دقيقة لعدد مرات تنفيذ كل عبارة في البرنامج، وتُضيف تعليقات توضيحية إلى الكود المصدري لتتبع التنفيذ. تأتي Gcov كأداة قياسية مع حزمة مُترجمات GNU (GCC). [ 1 ]

توفر أداة gcov معلومات حول عدد مرات تنفيذ أجزاء من التعليمات البرمجية في البرنامج . [ 2 ] وتنتج نسخة من ملف المصدر، مع إضافة تعليقات توضيحية حول ترددات التنفيذ. لا تُنتج أداة gcov أي بيانات زمنية، وتعمل فقط على التعليمات البرمجية المُجمَّعة باستخدام مجموعة أدوات GCC. يشير الدليل إلى أنها غير متوافقة مع أي آلية أخرى لتحليل الأداء أو تغطية الاختبار، [ 3 ] ولكنها تعمل أيضًا مع الملفات المُولَّدة بواسطة LLVM . [ 4 ]

وصف

يُنتج gcov تحليلًا لتغطية الاختبار لبرنامج مُجهز خصيصًا . يجب استخدام الخيارات -fprofile-arcs -ftest-coverageلتجميع البرنامج لتحليل التغطية (الخيار الأول لتسجيل إحصائيات التفرعات، والثاني لحفظ عدد مرات تنفيذ الأسطر)؛ -fprofile-arcsكما يجب استخدامها لربط البرنامج. [ 2 ] بعد تشغيل هذا البرنامج، سيتم إنشاء عدة ملفات بامتدادات ".bb" و".bbg" و".da"، والتي يمكن تحليلها بواسطة gcov. يأخذ gcov ملفات المصدر كوسائط سطر الأوامر، ويُنتج قائمة مصدر مُشروحة. يُسبق كل سطر من شفرة المصدر بعدد مرات تنفيذه؛ أما الأسطر التي لم تُنفذ فتُسبق بـ "#####". [ 2 ]

يُنشئ برنامج gcov ملف سجل باسم sourcefile.gcov يُشير إلى عدد مرات تنفيذ كل سطر من ملف المصدر sourcefile.c . يُمكن استخدام ملف المصدر المُعلّق هذا مع gprof ، وهي أداة تحليل أداء أخرى، لاستخراج معلومات التوقيت الخاصة بالبرنامج.

مثال

البرنامج التالي، المكتوب بلغة C ، يقوم بالتكرار على الأعداد الصحيحة من 1 إلى 9 ويختبر قابليتها للقسمة باستخدام عامل باقي القسمة (%).

#include <stdio.h>int main ( void ) { int i ;for ( i = 1 ; i < 10 ; i ++ ) { if ( i % 3 == 0 ) printf ( "%d يقبل القسمة على 3 \n " , i ); if ( i % 11 == 0 ) printf ( "%d يقبل القسمة على 11 \n " , i ); }return 0 ; }

لتمكين اختبار التغطية، يجب تجميع البرنامج باستخدام الخيارات التالية:

$ gcc -Wall -fprofile-arcs -ftest-coverage cov.c 

حيث يُمثل cov.c اسم ملف البرنامج. يُنشئ هذا ملفًا تنفيذيًا مُجهزًا يحتوي على تعليمات إضافية تُسجل عدد مرات تنفيذ كل سطر من البرنامج. يُضيف الخيار -ftest-coverage تعليمات لحساب عدد مرات تنفيذ كل سطر على حدة، بينما يُدمج الخيار -fprofile-arcs رمزًا للتجهيز لكل فرع من فروع البرنامج. يُسجل تجهيز الفروع مدى تكرار المسارات المختلفة التي يتم اتباعها من خلال عبارات "if" وغيرها من الشروط.

يمكن بعد ذلك تشغيل الملف التنفيذي لتحليل الكود وإنشاء بيانات التغطية .

./a.out

يتم كتابة البيانات من التشغيل إلى عدة ملفات بيانات تغطية بالامتدادات '.bb' و '.bbg' و '.da' على التوالي في الدليل الحالي .

إذا اختلف تنفيذ البرنامج بناءً على معلمات الإدخال أو البيانات، فيمكن تشغيله عدة مرات وستتراكم النتائج في ملفات بيانات التغطية لإجراء تحليل شامل.

يمكن تحليل هذه البيانات باستخدام أمر gcov واسم ملف المصدر:

تم تنفيذ 88.89% من 9 أسطر برمجية في الملف cov.c باستخدام الأمر gcov cov.c. جارٍ إنشاء الملف cov.c.gcov

ينتج الأمر gcov نسخة مشروحة من ملف المصدر الأصلي ، بامتداد الملف '.gcov'، تحتوي على عدد مرات تنفيذ كل سطر:

#include <stdio.h>int main ( void ) { 1 int i ;10 for ( i = 1 ; i < 10 ; i ++ ) { 9 if ( i % 3 == 0 ) 3 printf ( "%d يقبل القسمة على 3 \n " , i ); 9 if ( i % 11 == 0 ) ###### printf ("%d يقبل القسمة على 11\n", i); 9 }1 return 0 ; 1 }

يمكن رؤية عدد الأسطر في العمود الأول من المخرجات. الأسطر التي لم يتم تنفيذها مُعلَّمة بعلامات التجزئة '######'.

خيارات سطر الأوامر

تدعم أداة سطر الأوامر Gcov الخيارات التالية أثناء إنشاء ملفات مشروحة من بيانات الملف الشخصي: [ 5 ] [ 6 ]

  • -h ( --help ): عرض المساعدة حول استخدام gcov (على الإخراج القياسي)، والخروج دون القيام بأي معالجة أخرى.
  • -v ( --version ): عرض رقم إصدار gcov (على الإخراج القياسي)، والخروج دون إجراء أي معالجة أخرى.
  • -a ( --all-blocks ): يعرض عدد مرات تنفيذ كل كتلة أساسية على حدة . عادةً ما يُخرج gcov عدد مرات التنفيذ للكتل الرئيسية فقط في السطر. باستخدام هذا الخيار، يمكنك تحديد ما إذا كانت الكتل داخل سطر واحد لا تُنفَّذ.
  • -b ( --branch-probabilities ): يكتب ترددات التفرعات إلى ملف الإخراج، ويكتب معلومات ملخص التفرعات إلى الإخراج القياسي. يتيح لك هذا الخيار معرفة عدد مرات تنفيذ كل تفرع في برنامجك. لن تُعرض التفرعات غير المشروطة إلا إذا تم تحديد الخيار -u.
  • -c ( --branch-counts ): اكتب ترددات الفروع على أنها عدد الفروع التي تم أخذها، بدلاً من النسبة المئوية للفروع التي تم أخذها.
  • -n ( --no-output ): لا تقم بإنشاء ملف إخراج gcov.
  • -l ( --long-file-names ): يُنشئ أسماء ملفات طويلة لملفات المصدر المُضمّنة. على سبيل المثال، إذا كان ملف الرأس xh يحتوي على كود، وتم تضمينه في الملف ac، فإن تشغيل gcov على الملف ac سيُنتج ملف إخراج باسم ac##xhgcov بدلاً من xhgcov. قد يكون هذا مفيدًا إذا كان xh مُضمّنًا في ملفات مصدر متعددة وتريد رؤية المساهمات الفردية. إذا استخدمت الخيار `-p`، فسيكون كل من اسم الملف المُضمّن واسم الملف المُضمّن عبارة عن مسار كامل.
  • -p ( --preserve-paths ): الاحتفاظ بمعلومات المسار الكاملة في أسماء ملفات .gcov المُنشأة. بدون هذا الخيار، يُستخدم اسم الملف فقط. مع هذا الخيار، تُستخدم جميع الدلائل، مع استبدال الرمز `/` بالرمز `#`، وإزالة أجزاء الدليل `.`، وإعادة تسمية الأجزاء غير القابلة للإزالة `..` إلى `^`. يُفيد هذا الخيار إذا كانت ملفات المصدر موجودة في عدة دلائل مختلفة.
  • -r ( --relative-only ): يعرض فقط معلومات حول ملفات المصدر ذات المسار النسبي (بعد حذف بادئة المصدر). عادةً ما تكون المسارات المطلقة ملفات رأس النظام، وتغطية أي دوال مضمنة فيها غير مهمة في العادة.
  • -f ( --function-summaries ): إخراج ملخصات لكل دالة بالإضافة إلى ملخص مستوى الملف.
  • -o directory|file ( --object-directory directory أو --object-file file ): حدد إما المجلد الذي يحتوي على ملفات بيانات gcov، أو اسم مسار الكائن. يتم البحث عن ملفات البيانات .gcno و .gcda باستخدام هذا الخيار. إذا تم تحديد مجلد، فستكون ملفات البيانات موجودة في ذلك المجلد وستُسمى باسم ملف الإدخال، بدون امتداده. إذا تم تحديد ملف هنا، فستُسمى ملفات البيانات باسم ذلك الملف، بدون امتداده.
  • -s directory ( --source-prefix directory ): بادئة لأسماء ملفات المصدر تُحذف عند إنشاء ملفات التغطية الناتجة. يُفيد هذا الخيار عند الإنشاء في دليل منفصل، حيث لا يُراد استخدام مسار دليل المصدر عند تحديد أسماء ملفات الإخراج. يُرجى ملاحظة أن اكتشاف البادئة يُطبّق قبل تحديد ما إذا كان مسار ملف المصدر مطلقًا.
  • -u ( --unconditional-branches ): عند تحديد احتمالات التفرع، يتم تضمين احتمالات التفرع غير المشروط. عادةً ما تكون التفرعات غير المشروطة غير مهمة.
  • -d ( --display-progress ): عرض التقدم على المخرج القياسي.

ملخصات التغطية

Lcov هي واجهة رسومية لبرنامج gcov. تجمع بيانات gcov لملفات مصدرية متعددة، وتُنشئ صفحات HTML تحتوي على شفرة المصدر مع شرح معلومات التغطية. كما تُضيف صفحات نظرة عامة لتسهيل التنقل داخل بنية الملف. يدعم Lcov قياس تغطية العبارات والدوال والفروع. [ 7 ] يتوفر أيضًا إصدار لنظام ويندوز.

يوفر Gcovr أداةً لإدارة استخدام gcov وإنشاء ملخصات لنتائج تغطية الكود. هذا الأمر مستوحى من حزمة coverage.py في بايثون، والتي توفر أداةً مماثلةً في بايثون. يُنتج Gcovr تقارير ملخصة مُختصرة سهلة القراءة، أو تقارير XML سهلة القراءة آليًا، أو ملخصًا رسوميًا بتنسيق HTML. يمكن استخدام تقارير XML التي يُنشئها gcovr بواسطة Jenkins لتوفير ملخصات رسومية لتغطية الكود. يدعم Gcovr قياس تغطية العبارات والفروع [ 8 ].

SCov هي أداة مساعدة تعالج تنسيق النص الوسيط الذي يُنشئه gcov (باستخدام gcov -i) لإنشاء تقارير حول تغطية التعليمات البرمجية. يمكن أن تكون هذه التقارير عبارة عن تقرير نصي بسيط، أو صفحات HTML تحتوي على تقارير أكثر تفصيلاً. [ 9 ]

انظر أيضاً

  • Tcov – أداة تغطية التعليمات البرمجية لنظام Solaris متوفرة في حزمة Sun Studio
  • Trucov - يهدف إلى تحسين Gcov مع إخراج قابل للقراءة آليًا

مراجع

  1. "تغطية الكود باستخدام Gcov" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 9 أبريل 2014. تم الاطلاع عليه في 12 فبراير 2012 .
  2. 1 2 3 بريان ج. غوف. مقدمة إلى GCC - لمترجمات GNU gcc و g++ - اختبار التغطية باستخدام gcov . تم الاطلاع عليه في 12 فبراير 2012 .
  3. "صفحة دليل gcov" . تم الاطلاع عليها في 12 فبراير 2012 .
  4. "gcov llvm" . تم الاطلاع عليه بتاريخ 12 نوفمبر 2022 .
  5. gnu.org. "خيارات سطر أوامر Gcov" . تم الاطلاع عليه بتاريخ 11 فبراير 2012 .
  6. أوامر لينكس. "خيارات سطر أوامر Gcov" . مؤرشف من الأصل بتاريخ 23 مايو 2012. تم الاطلاع عليه بتاريخ 12 فبراير 2012 .
  7. "Lcov" . GitHub .
  8. "Gcovr" .
  9. "SCov" .