| LCOV(1) | LCOV | LCOV(1) |
نام (NAME)
lcov - ابزار گرافیکی و خط فرمانی استخراج و مدیریت پوشش کد GCOV
خلاصه دستور (SYNOPSIS)
استخراج فایل ردگیری دادههای پوشش کد (از دادههای تولیدشده توسط کامپایلر). قالب فایل ردگیری lcov (فایل «.info») در geninfo(1) <file://../man/geninfo.1.html> شرح داده شده است.
lcov -c | --capture
[ -d | --directory *directory* ]
[ -k | --kernel-directory *directory* ]
[ -o | --output-file *tracefile* ]
[ -t | --test-name *testname* ]
[ -b | --base-directory *directory* ]
[ --build-directory *directory* ]
[ --source-directory *directory* ]
[ -i | --initial ]
[ --all ]
[ --gcov-tool *tool* ]
[ --branch-coverage ]
[ --mcdc-coverage ]
[ --demangle-cpp [ *param* ] ]
[ --checksum ]
[ --no-checksum ]
[ --no-recursion ]
[ -f | --follow ]
[ --sort-input ]
[ --compat-libtool ]
[ --no-compat-libtool ]
[ --msg-log [ *log_file_name* ] ]
[ --ignore-errors *errors* ]
[ --expect-message-count *message_type=expr[,message_type=expr..]* ]
[ --preserve ]
[ --to-package *package* ]
[ --from-package *package* ]
[ --no-markers ]
[ --external ]
[ --no-external ]
[ --compat *mode*\ =on|off|auto]
[ --context-script *script_file* ]
[ --criteria-script *script_file* ]
[ --history-script *callback* ]
[ --resolve-script *script_file* ]
[ --version-script *script_file* ]
[ --unreachable-script *callback* ]
[ --comment *comment_string* ]
[ --large-file *regexp* ]
تولید فایل ردگیری (از دادههای تولیدشده توسط کامپایلر) با صفر کردن مقادیر تمام شمارندهها:
lcov -z | --zerocounters
[ -d | --directory *directory* ]
[ --no-recursion ]
[ -f | --follow ]
نمایش شمارشهای پوشش ثبتشده در فایلهای ردگیری پیشتر تولیدشده:
lcov -l | --list *tracefile*
[ --list-full-path ]
[ --no-list-full-path ]
تجمیع چندین فایل ردگیری پوشش در یک فایل:
lcov -a | --add-tracefile *tracefile_patterns*
[ -o | --output-file *tracefile* ]
[ --prune-tests ]
[ --forget-test-names ]
[ --map-functions ]
[ --branch-coverage ]
[ --mcdc-coverage ]
[ --checksum ]
[ --no-checksum ]
[ --sort-input ]
بسته به مدل استفاده شما، ممکن است نیازی به ایجاد فایلهای داده پوشش تجمیعی نباشد. بهعنوان مثال، اگر آزمونهای رگرسیون شما به چندین مجموعه (suite) تقسیم شده باشند، ممکن است بخواهید دادههای هر مجموعه را جداگانه نگه دارید و نتایج هر مجموعه و نتایج تجمیعی را در طول زمان با یکدیگر مقایسه کنید. دستور genhtml به شما اجازه میدهد فایلهای ردگیری را از طریق یک یا چند الگوی glob مشخص کنید - که امکان تولید گزارشهای تجمیعی را بدون تولید صریح فایلهای ردگیری تجمیعشده فراهم میکند. صفحه راهنمای genhtml را ببینید.
تولید فایل ردگیری جدید از فایل ردگیری موجود، فقط با حفظ دادههای فایلهای منطبق بر الگو:
lcov -e | --extract *tracefile pattern*
[ -o | --output-file *tracefile* ]
[ --checksum ]
[ --no-checksum ]
تولید فایل ردگیری جدید از فایل ردگیری موجود، با حذف دادههای فایلهای منطبق بر الگو:
lcov -r | --remove *tracefile pattern*
[ -o | --output-file *tracefile* ]
[ --checksum ]
[ --no-checksum ]
تولید فایل ردگیری جدید از فایلهای ردگیری موجود با انجام عملیات مجموعهها روی دادههای پوشش کد:
lcov --intersect *rh_glob_pattern*
[ -o | --output-file *tracefile* ]
lh_glob_pattern
خروجی منعکسکننده
خواهد بود، بهطوری که نقاط پوشش (coverpoints) یافتشده در هر دو مجموعه ادغام (جمع) میشوند، در حالی که نقاط پوشش یافتشده در تنها یکی از مجموعهها کنار گذاشته میشوند. توجه داشته باشید که بلوکهای انشعاب (branch blocks) یکسان در نظر گرفته میشوند اگر و فقط اگر شناسه بلوک و فهرست عبارات انشعاب مرتبط با آنها یکسان باشد. توابع نیز در صورتی یکسان در نظر گرفته میشوند که نام و مکان آنها یکسان باشد.
lcov --subtract *rh_glob_pattern*
[ -o | --output-file *tracefile* ]
lh_glob_pattern
خروجی منعکسکننده
خواهد بود، بهطوری که فقط نقاط پوشش یافتشده در مجموعه سمت چپ نگهداری شده و سایر موارد حذف میشوند.
خلاصهسازی محتوای فایل ردگیری:
lcov --summary *tracefile*
چاپ نسخه یا پیام راهنما و خروج:
lcov [ -h | --help ]
[ --version ]
گزینههای عمومی lcov - پشتیبانیشده در تمام موارد کاربرد بالا:
lcov [ --keep-going ]
[ --filter *type* ]
[ -q | --quiet ]
[ -v | --verbose ]
[ --comment *comment_string* ]
[ --debug ]
[ --parallel | -j [*integer*] ]
[ --memory *integer_num_Mb* ]
[ --tempdir *dirname* ]
[ --branch-coverage ]
[ --mcdc-coverage ]
[ --config-file *config-file* ]
[ --rc *keyword*\ =\ *value* ]
[ --profile [ *profile-file* ] ]
[ --include *glob_pattern* ]
[ --exclude *glob_pattern* ]
[ --erase-functions *regexp_pattern* ]
[ --substitute *regexp_pattern* ]
[ --omit-lines *regexp_pattern* ]
[ --fail-under-branches *percentage* ]
[ --fail-under-lines *percentage* ]
توضیحات (DESCRIPTION)
برنامه lcov یک رابط کاربری گرافیکی برای ابزار آزمون پوشش کد gcov در GCC است. این ابزار دادههای پوشش خطوط، توابع و انشعابها را برای چندین فایل منبع جمعآوری کرده و صفحات HTML شامل کدهای منبع حاشیهنویسیشده با اطلاعات پوشش کد را ایجاد میکند. همچنین صفحاتی برای نمای کلی جهت ناوبری آسان در ساختار فایلها اضافه مینماید.
از lcov برای جمعآوری دادههای پوشش و از genhtml برای ایجاد صفحات HTML استفاده کنید. دادههای پوشش میتوانند از هسته لینوکس در حال اجرا یا از برنامههای فضای کاربر جمعآوری شوند. برای انجام این کار، باید مراحل آمادهسازی زیر را طی کنید:
برای پوشش کد هسته لینوکس:
برای پوشش کد برنامههای فضای کاربر:
لطفاً توجه داشته باشید که در این صفحه راهنما، قالب خروجی lcov به عنوان «فایل .info» یا «tracefile» نامیده میشود و خروجی GCOV «فایل .da» خوانده میشود.
همچنین توجه داشته باشید که هنگام چاپ درصدها، مقادیر 0% و 100% تنها زمانی چاپ میشوند که مقادیر دقیقاً برابر با 0% و 100% باشند. سایر مقادیری که به طور معمول به 0% یا 100% گرد میشوند، در عوض به عنوان نزدیکترین مقدار غیرمرزی چاپ میگردند. این رفتار مطابق با رفتار ابزار gcov(1) <file://../man/gcov.1.html> است.
بهطور پیشفرض، lcov و ابزارهای مرتبط، دادههای پوشش خط و تابع را تولید و جمعآوری میکنند. دادههای انشعاب بهطور پیشفرض جمعآوری یا نمایش داده نمیشوند؛ تمام ابزارها به ترتیب از گزینههای --branch-coverage و --mcdc-coverage برای فعالسازی پوشش انشعاب و MC/DC پشتیبانی میکنند - یا میتوانید با افزودن تنظیمات مناسب به فایل پیکربندی lcov شخصی، گروهی یا سیستمی خود، پوشش انشعاب را بهطور دائمی فعال کنید. برای جزئیات به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه نمایید.
گزینهها (OPTIONS)
بهطور کلی، (تقریباً) تمام گزینههای lcov را میتوان در یک فایل پیکربندی نیز مشخص کرد - برای جزئیات به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.
-a tracefile_patterns --add-tracefile tracefile_patterns
با استفاده از گزینه -a چندین فایل ردگیری (tracefile) را مشخص کنید تا دادههای پوشش موجود در این فایلها با جمع زدن تعداد دفعات اجرا برای ترکیبهای منطبق تست و نام فایل با یکدیگر ترکیب شوند.
نتیجه عملیات افزودن در خروجی استاندارد (stdout) یا فایل ردگیری مشخصشده با -o نوشته خواهد شد.
در هر زمان فقط یکی از گزینههای -z، -c، -a، -e، -r، -l یا –summary را میتوان مشخص کرد.
-b directory --base-directory directory
از این گزینه برای تعیین دایرکتوری پایه محیط ساخت (build-environment) زمانی که lcov پیامهای خطایی مانند زیر تولید میکند استفاده کنید:
ERROR: could not read source file /home/user/project/subdir1/subdir2/subdir1/subdir2/file.c
در این مثال، از /home/user/project بهعنوان دایرکتوری پایه استفاده کنید.
این گزینه هنگام استفاده از lcov در پروژههای ساختهشده با libtool یا محیطهای ساخت مشابه که با یک دایرکتوری پایه کار میکنند لازم است؛ یعنی محیطهایی که در آنها دایرکتوری کاری جاری هنگام فراخوانی کامپایلر، با دایرکتوری محل قرارگیری فایل کد منبع یکسان نیست.
توجه داشته باشید که این گزینه در محیطهایی که از چندین دایرکتوری پایه استفاده میکنند کار نخواهد کرد. در این حالت از تنظیم فایل پیکربندی geninfo_auto_base=1 استفاده کنید (به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید).
--build-directory build_directory
برای جزئیات بیشتر به صفحه راهنمای geninfo(1) <file://../man/geninfo.1.html> مراجعه کنید.
--source-directory dirname
برای مسیرهای نسبی فایلهای منبع فهرستشده در بهعنوان مثال مسیرهای یافتشده در tracefile، یا یافتشده در خروجی gcov در حین –capture - احتمالاً پس از اعمال جایگزینیها - ابزار lcov ابتدا مسیر را از ‘cwd’ (جایی که genhtml فراخوانی شده است) و سپس از هر نام دایرکتوری جایگزین به ترتیب مشخصشده جستجو خواهد کرد. نخستین مکان منطبق استفاده میشود.
این گزینه میتواند چندین بار مشخص شود تا دایرکتوریهای بیشتری به مسیر جستجوی منبع افزوده شود.
-c --capture
بهطور پیشفرض تعداد دفعات اجرای جاری هسته را ضبط کرده و دادههای پوشش حاصل را در خروجی استاندارد مینویسد. از گزینه –directory برای ضبط شمارندهها برای یک برنامه فضای کاربری استفاده کنید.
نتیجه عملیات ضبط در stdout یا فایل ردگیری مشخصشده با -o نوشته خواهد شد.
هنگام ترکیب با فلگ --all هر دو پوشش زمان اجرا و زمان کامپایل در یک مرحله استخراج خواهند شد. توضیحات مربوط به فلگ --initial در زیر را ببینید.
برای جزئیات بیشتر درباره فرآیند ضبط و گزینهها و پارامترهای موجود به صفحه راهنمای geninfo(1) <file://../man/geninfo.1.html>) مراجعه کنید.
در هر زمان فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary را میتوان مشخص کرد.
--branch-coverage
این معادل استفاده از گزینه “–rc branch_coverage=1” است؛ این گزینه برای سازگاری بهتر با رابط genhtml اضافه شده است.
--mcdc-coverage
این معادل استفاده از گزینه “–rc mcdc_coverage=1” است. پوشش MC/DC برای نگارشهای GCC نسخه 14.2 و بالاتر، یا LLVM نسخه 18.1 و بالاتر پشتیبانی میشود.
برای جزئیات بیشتر درباره ضبط دادههای MC/DC در LLVM به llvm2lcov –help مراجعه کنید.
برای جزئیات بیشتر بخش MC/DC از صفحه راهنمای genhtml(1) <file://../man/genhtml.1.html> را ببینید.
--checksum --no-checksum
از –checksum برای فعالسازی تولید چکسام یا از –no-checksum برای غیرفعال کردن آن استفاده کنید. تولید چکسام بهطور پیشفرض غیرفعال است.
هنگامی که تولید چکسام فعال باشد، برای هر خط از کد منبع یک چکسام ایجاد شده و همراه با دادههای پوشش ذخیره میشود. این چکسام برای جلوگیری از تلاش برای ترکیب دادههای پوشش از نگارشهای مختلف کد منبع استفاده خواهد شد.
اگر با نگارشهای مختلف کد منبع کار نمیکنید، این گزینه را غیرفعال کنید تا پردازش دادههای پوشش سریعتر شده و اندازه فایلهای ردگیری کاهش یابد.
توجه داشته باشید که این گزینه تا حدی تحتالشعاع گزینه --version-script قرار دارد - که عملکردی مشابه انجام میدهد، اما در سطح «کل فایل».
--compat mode=value*[,*mode=value,…]
از –compat برای تعیین اینکه lcov باید هنگام ضبط دادههای پوشش یک یا چند حالت سازگاری را فعال کند استفاده کنید. میتوانید یک فهرست جداشده با کاما از جفتهای mode=value برای مشخص کردن مقادیر چندین حالت ارائه دهید.
مقادیر معتبر عبارتند از:
on
off
auto
اگر مقداری مشخص نشود، ‘on’ بهعنوان مقدار پیشفرض در نظر گرفته میشود.
حالتهای معتبر عبارتند از:
libtool
مقدار پیشفرض برای این تنظیم ‘on’ است.
hammer
مقدار پیشفرض برای این تنظیم ‘auto’ است.
split_crc
مقدار پیشفرض برای این تنظیم ‘auto’ است.
--compat-libtool --no-compat-libtool
از –compat-libtool برای فعالسازی حالت سازگاری libtool یا از –no-compat-libtool برای غیرفعال کردن آن استفاده کنید. حالت سازگاری libtool بهطور پیشفرض فعال است.
هنگامی که حالت سازگاری libtool فعال باشد، lcov فرض میکند که کد منبع مربوط به یک فایل .da واقع در دایرکتوری با نام “.libs” را میتوان در دایرکتوری والد آن پیدا کرد.
اگر در محیط ساخت خود دایرکتوریهایی با نام “.libs” دارید اما از libtool استفاده نمیکنید، این گزینه را غیرفعال کنید تا از بروز مشکل هنگام ضبط دادههای پوشش جلوگیری شود.
--config-file config-file
هنگامی که این گزینه مشخص شود، نه فایل پیکربندی سراسری سیستم /etc/lcovrc و نه فایل پیکربندی ویژه هر کاربر ~/.lcovrc خوانده نخواهد شد.
این گزینه ممکن است زمانی مفید باشد که نیاز به اجرای همزمان چند نمونه از lcov با گزینههای مختلف فایل پیکربندی وجود داشته باشد.
توجه داشته باشید که این گزینه باید بهطور کامل مشخص شود - مخففسازی پشتیبانی نمیشود.
--profile [profile-data-file]
--history-script callback
برای اطلاعات بیشتر به صفحه راهنمای genhtml(1) <file://../man/genhtml.1.html> مراجعه کنید.
در هر زمان فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary را میتوان مشخص کرد.
-d directory --directory directory
اگر میخواهید روی دادههای پوشش برای یک برنامه فضای کاربری کار کنید، از این گزینه برای تعیین مکانی که برنامه در آن کامپایل شده است استفاده کنید (اینجاست که فایلهای شمارنده با پسوند .da ذخیره میشوند).
توجه داشته باشید که میتوانید این گزینه را بیش از یک بار مشخص کنید.
--exclude pattern
اگر میخواهید دادههای پوشش را برای مجموعه خاصی از فایلهای مبدأ منطبق با هر یک از الگوهای دادهشده مستثنی کنید، از این سوییچ استفاده کنید. با استفاده از چندین سوییچ خط فرمان --exclude میتوان چندین الگو را مشخص کرد. patternها به عنوان الگوهای وایلدکارت شل تفسیر خواهند شد (توجه داشته باشید که ممکن است لازم باشد برای جلوگیری از بسط اولیه آنها توسط شل، به درستی اسکیپ شوند).
نکته: الگو باید طوری مشخص شود که با مسیر مطلق (absolute) هر فایل مبدأ مطابقت داشته باشد. اگر الگویی را مشخص کنید که به نظر میرسد به درستی اعمال نمیشود - فایلهایی که انتظار داشتید مستثنی شوند همچنان در خروجی ظاهر میشوند - میتوانید به دنبال پیامهای هشدار در فایل لاگ بگردید. lcov برای هر الگویی که حداقل یک بار اعمال نشود، یک هشدار صادر میکند.
میتواند با سوییچ خط فرمان --include ترکیب شود. اگر یک فایل مشخص هم با الگوی include و هم با الگوی exclude مطابقت داشته باشد، الگوی exclude اولویت خواهد داشت.
--erase-functions regexp
توجه داشته باشید که این گزینه نیازمند استفاده از نسخهای از gcc است که به اندازه کافی جدید باشد تا از گزارش خط شروع/پایان تابع پشتیبانی کند، یا اینکه ابزار را برای استخراج دادههای لازم پیکربندی کنید - به بحث derive_function_end_line در صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.
--substitute regexp_pattern
از این گزینه در شرایطی استفاده کنید که geninfo نمیتواند مسیر صحیح فایلهای کد منبع یک پروژه را پیدا کند. با ارائه یک regexp_pattern در قالب عبارت منظم پرل (به صفحه راهنمای perlre(1) <file://../man/perlre.1.html> مراجعه کنید)، میتوانید به geninfo دستور دهید بخشهایی از مسیر نادرست مبدأ را حذف یا تغییر دهد. همچنین به گزینه --resolve-script مراجعه کنید.
میتوان یک یا چند الگوی –substitution و/یا یک –resolve-script را مشخص کرد. هنگامی که چندین الگو مشخص میشود، آنها به ترتیبی که تعیین شدهاند اعمال میشوند؛ ابتدا الگوهای جایگزینی و سپس کالبک resolve. ترتیب جستجوی فایل به این صورت است:
- 1.
- جستجو برای
نام فایل
(تغییرنیافته).
اگر فایل وجود دارد: آن را برگردان.
- 2.
- اعمال تمام
الگوهای
جایگزینی
به ترتیب -
نتیجه
الگوی اول
به عنوان
ورودی
الگوی دوم
استفاده
میشود و به
همین ترتیب.
اگر فایلی مطابق با نام حاصل وجود دارد: آن را برگردان.
- 3.
- اعمال
کالبک ‘resolve’
روی نتیجه
نهایی
جایگزینیهای
الگو.
اگر فایلی مطابق با نام حاصل وجود دارد: آن را برگردان.
- 4.
- در غیر این
صورت: نام
اصلی فایل
(تغییرنیافته)
را برگردان.
بسته به زمینه، نام فایل حلنشده ممکن است منجر به خطا شود یا نشود.
جایگزینیها در چندین زمینه توسط lcov/genhtml/geninfo استفاده میشوند:
- در حین –capture، اعمالشده روی نام فایلهای مبدأ یافتشده در فایلهای داده پوشش تولیدشده توسط gcov (به صفحه راهنمای gcov(1) <file://../man/gcov.1.html> مراجعه کنید).
- در حین –capture، اعمالشده روی مسیرهای جایگزین –build-dir، هنگام جستجو برای فایل داده .gcno (زمان کامپایل) متناظر با یک فایل داده .gcda (زمان اجرا).
- اعمالشده
روی نام
فایلهای
یافتشده
در
فایلهای
داده lcov
(فایلهای
“.info”) - برای
مثال، در
حین تجمیع
دادههای lcov
یا تولید
گزارشهای
متنی و HTML.
برای مثال، نامهای جایگزینشده برای یافتن فایلهای مبدأ جهت فیلتر کردن مبتنی بر متن استفاده میشوند (به بخش –filter در زیر مراجعه کنید) و به کالبکهای –version-script، –annotate-script و –criteria-script ارسال میشوند.
- اعمالشده روی نام فایلهای یافتشده در –diff-file ارسالشده به genhtml.
مثال:
- 1.
- هنگامی که geninfo گزارش میدهد که نمیتواند فایل مبدأ زیر را پیدا کند:
/path/to/src/.libs/file.c
در حالی که فایل در واقع در مسیر زیر قرار دارد:
/path/to/src/file.c
از پارامتر زیر استفاده کنید:
--substitute 's#/.libs##g'
این کار تمام رشتههای “/.libs” را از مسیر حذف میکند.
- 2.
- هنگامی که geninfo گزارش میدهد که نمیتواند فایل مبدأ زیر را پیدا کند:
/tmp/build/file.c
در حالی که فایل در واقع در مسیر زیر قرار دارد:
/usr/src/file.c
از پارامتر زیر استفاده کنید:
--substitute 's#/tmp/build#/usr/src#g'
این کار تمام رشتههای “/tmp/build” را در مسیر به “/usr/src” تغییر میدهد.
--omit-lines regexp
اگر میخواهید دادههای پوشش خط و انشعاب را برای برخی ساختارهای خاص در کد خود مستثنی کنید (برای مثال، یک ماکروی پیچیده)، از این سوییچ استفاده کنید. با استفاده از چندین سوییچ خط فرمان --omit-lines میتوان چندین الگو را مشخص کرد. regexp به عنوان عبارات منظم پرل تفسیر خواهد شد (توجه داشته باشید که ممکن است لازم باشد برای جلوگیری از بسط اولیه آنها توسط شل، به درستی اسکیپ شوند). اگر میخواهید الگو به صراحت از ابتدا یا انتهای خط مطابقت داده شود، regexp شما باید با “^” و/یا “$” شروع و/یا پایان یابد.
توجه داشته باشید که تنظیم فایل پیکربندی lcovrc یعنی lcov_excl_line = regexp مشابه با --omit-lines است. --omit-lines زمانی مفید است که چندین تیم وجود دارند که هر کدام میخواهند الگوهای خاصی را مستثنی کنند. --omit-lines خاصیت افزایشی دارد و میتواند در چندین فایل کانفیگ مشخص شود، در حالی که هر بار فراخوانی lcov_excl_line مقدار قبلی را بازنویسی میکند - و بنابراین تیمها باید هماهنگ باشند.
--external --no-external
فایلهای مبدأ خارجی فایلهایی هستند که در هیچیک از دایرکتوریهای مشخصشده توسط –directory یا –base-directory قرار ندارند. برای گنجاندن نقاط پوشش (coverpoints) در فایلهای مبدأ خارجی هنگام دریافت دادههای پوشش از –external و برای مستثنی کردن آنها از –no-external استفاده کنید. اگر مسیر –directory یا –base-directory شما حاوی یک پیوند نرم (soft link) باشد، دایرکتوری هدف واقعی «داخلی» در نظر گرفته نمیشود مگر اینکه از گزینه –follow استفاده شود.
گزینه –no-external ابزاری تا حدی خام و کلی است؛ گزینههای –exclude و –include کنترل دقیقتری بر اینکه چه دادههای پوششی گنجانده شده یا نشوند در صورت پیچیده بودن ساختار پروژه و/یا در حالتی که –no-external رفتار مد نظر شما را انجام ندهد، فراهم میکنند.
دادههای فایلهای مبدأ خارجی به صورت پیشفرض گنجانده میشوند (included).
--forget-test-names
این گزینه همچنین میتواند به صورت دائمی با استفاده از گزینه فایل پیکربندی forget_testcase_names پیکربندی شود.
--prune-tests
از این گزینه برای تعیین فهرستی از فایلهای ردگیری یکتا از میان فهرست مشخصشده توسط --add-tracefile استفاده کنید. یک فایل ردگیری در صورتی یکتا در نظر گرفته میشود که تنها فایل ردگیری باشد که:
- 1.
- حاوی داده برای یک فایل مبدأ خاص باشد
- 2.
- حاوی داده برای یک نام مورد آزمون خاص باشد
- 3.
- حاوی دادههای پوشش غیرصفر برای یک خط، تابع یا انشعاب خاص باشد
توجه داشته باشید که فهرست فایلهای نگهداشتهشده ممکن است به ترتیبی که پردازش میشوند بستگی داشته باشد. برای مثال، اگر A و B حاوی دادههای پوشش یکسان باشند، اولین فایلی که مشاهده میشود نگهداشته شده و دومی هرس (prune) خواهد شد. هنگامی که از گزینه --parallel استفاده میشود، ترتیب پردازش فایل غیرقطعی (nondeterministic) است - به این معنی که نتیجه هرسشده در این حالت ممکن است از یک اجرا تا اجرای بعدی متفاوت باشد.
--prune-tests باید همراه با --add-tracefile مشخص شود. در صورت مشخص شدن، lcov به جای دادههای فایل ردگیری ترکیبی، فهرست فایلهای یکتا را صادر خواهد کرد.
--map-functions
از این گزینه برای تعیین فهرست فایلهای ردگیری حاوی دادههای پوشش غیرصفر برای هر تابع از میان فهرست فایلهای ردگیری مشخصشده توسط --add-tracefile استفاده کنید.
این گزینه باید همراه با --add-tracefile مشخص شود. در صورت مشخص شدن، lcov به جای دادههای فایل ردگیری ترکیبی، فهرست توابع و فایلهای ردگیری مرتبط را صادر خواهد کرد.
--context-script script
برای جزئیات بیشتر درباره اسکریپت زمینه (context script)، به صفحه راهنمای genhtml مراجعه کنید.
--criteria-script script
برای جزئیات بیشتر درباره اسکریپت معیارها، صفحه راهنمای genhtml را ببینید. توجه داشته باشید که lcov اطلاعات تاریخ و مالک را ردیابی نمیکند (به مدخل –annotate-script در صفحه راهنمای genhtml مراجعه کنید) - بنابراین این اطلاعات به بازخوانی (callback) lcov منتقل نمیشوند.
--resolve-script script
--version-script script
برای جزئیات بیشتر درباره اسکریپت نسخه، صفحه راهنمای genhtml را ببینید.
--unreachable-script module
توجه داشته باشید که “module” الزاماً باید یک ماژول Perl باشد.
برای جزئیات بیشتر، صفحه راهنمای genhtml را ببینید.
--comment comment_string
یادداشتها میتوانند برای مستندسازی شرایطی که فایل ردگیری تحت آن تولید شده مفید باشند: میزبان، تاریخ، محیط و غیره.
توجه داشته باشید که این گزینه برای عملیاتهای lcov که فایل نتیجه خروجی نمینویسند هیچ تاثیری ندارد: –list –summary، –prune-tests، و –map-functions.
برای شرح قالب یادداشتها در فایل نتیجه، به صفحه راهنمای geninfo مراجعه کنید.
-e tracefile pattern --extract tracefile pattern
اگر میخواهید دادههای پوشش آزمون را تنها برای مجموعهای خاص از فایلها از یک فایل ردگیری استخراج کنید، از این سوییچ استفاده نمایید. پارامترهای خط فرمان اضافی به عنوان الگوهای وایلدکارت شل تفسیر خواهند شد (توجه داشته باشید که ممکن است لازم باشد به شکل مناسب اسکیپ شوند تا از بسط زودهنگام توسط شل جلوگیری شود). هر مدخل فایل در tracefile که حداقل با یکی از آن الگوها مطابقت داشته باشد استخراج خواهد شد.
توجه: الگو باید طوری مشخص شود که با مسیر مطلق هر فایل منبع مطابقت داشته باشد.
نتیجه عملیات استخراج در stdout یا فایل ردگیری مشخصشده با -o نوشته خواهد شد.
در هر بار فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary را میتوان مشخص کرد.
-f --follow
--large-file regexp
--from-package package
اگر ماشینهای جداگانهای برای ساخت و آزمایش دارید و میخواهید ایجاد فایل .info را روی ماشین ساخت انجام دهید، از این گزینه استفاده کنید. برای اطلاعات بیشتر به –to-package مراجعه کنید.
--sort-input
--gcov-tool tool
برای جزئیات بیشتر، صفحه راهنمای geninfo را ببینید.
-h --help
--include pattern
اگر میخواهید دادههای پوشش آزمون را فقط برای مجموعه خاصی از فایلهای منبع که با هر یک از الگوهای دادهشده مطابقت دارند شامل کنید، از این سوییچ استفاده نمایید. با استفاده از چندین سوییچ خط فرمان --include میتوان چندین الگو را مشخص کرد. patterns به عنوان الگوهای وایلدکارت شل تفسیر خواهند شد (توجه داشته باشید که ممکن است برای جلوگیری از بسط آنها توسط شل، نیاز به اسکیپ مناسب باشد).
توجه: الگو باید به گونهای مشخص شود که با مسیر مطلق هر فایل منبع مطابقت داشته باشد.
اگر الگویی مشخص کنید که به نظر نمیرسد به درستی اعمال شود - فایلهایی که انتظار داشتید در خروجی گنجانده شوند ظاهر نشوند - ابزار lcov یک پیام خطای نوع ‘unused’ تولید خواهد کرد. برای چگونگی نادیده گرفتن خطا یا تبدیل آن به یک هشدار توسط lcov، به گزینه –ignore-errors مراجعه کنید.
--msg-log [log_file_name]
--ignore-errors errors
از این گزینه برای مشخص کردن فهرستی از یک یا چند دسته از خطاها استفاده کنید که lcov پس از آنها به جای توقف، باید پردازش را ادامه دهد. توجه داشته باشید که ابزار یک هشدار (به جای خطای مهلک) تولید خواهد کرد، مگر اینکه دو (یا چند) بار خطا را نادیده بگیرید:
lcov ... --ignore-errors source,source ...
errors میتواند فهرستی از کلمات کلیدی زیر باشد که با کاما از هم جدا شدهاند:
branch
callback
child
corrupt
count
deprecated
empty
excessive
fork
اگر پیام نادیده گرفته شود ( –ignore-errors fork )، ابزار genhtml مدتی کوتاه منتظر میماند و سپس اجرای ناموفق را مجدداً تلاش میکند.
اگر خطاهای مداوم مشاهده میکنید، یا موازیسازی را غیرفعال کرده یا کاهش دهید، یک محدودیت حافظه تعیین کنید، یا سرور بزرگتری برای اجرای کار بیابید.
format
gcov
graph
inconsistent
internal
mismatch
- عبارت شاخه (فیلد ۳ در مدخل ‘BRDA’ فایل .info) از دادههای ادغام همخوانی ندارد، یا
- تعداد دفعات اجرای تابع (FNDA:…) وجود دارد اما اعلان تابع (FN:…) یافت نمیشود.
missing
negative
توجه داشته باشید که مقادیر منفی ممکن است ناشی از یک باگ شناختهشده GCC باشند - ببینید:
و کامپایل با “-fprofile-update=atomic” را امتحان کنید. باید مجدداً کامپایل کرده، آزمونهای خود را دوباره اجرا نمایید و دادههای پوشش را مجدداً ضبط کنید.
package
parallel
اگر خطایی در رابطه با اجرای موازی مشاهده میکنید که نامعتبر به نظر میرسد، بهتر است فلگ –parallel را برداشته و دوباره تلاش کنید. اگر حذف این فلگ منجر به نتیجه متفاوتی شد، لطفاً مشکل را (به همراه یک مورد آزمایشی) گزارش دهید تا ابزار اصلاح شود.
parent
range
source
unreachable
unsupported
unused
usage
utility
version
همچنین برای بررسی پارامتر ‘max_message_count’ که میتوان از آن برای کنترل تعداد هشدارهای صادرشده پیش از سرکوب تمام پیامهای بعدی استفاده کرد، به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید. از این کار میتوان برای کاهش حجم فایل لاگ استفاده کرد.
--expect-message-count message_type:expr[,message_type:expr]
برای جزئیات بیشتر درباره این گزینه به راهنمای genhtml(1) <file://../man/genhtml.1.html> و همچنین برای شرح گزینه معادل در پرونده پیکربندی به بخش “expect_message_count” در راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.
--keep-going
این گزینه خط فرمان متناظر با گزینه stop_on_error [0|1] در lcovrc است. برای جزئیات بیشتر به راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.
--preserve
--filter filters
--demangle-cpp [param]
-i --initial
پیش از اجرای هر مورد آزمون، lcov را با گزینه -c و این گزینه روی دایرکتوریهای حاوی پروندههای .bb، .bbg یا .gcno اجرا کنید. نتیجه یک پرونده داده پوشش «پایه» (baseline) خواهد بود که برای هر خط کد دارای ابزار دقیق، مقدار پوشش صفر دارد. این پرونده داده را (با استفاده از lcov -a) با پروندههای داده پوشش ثبتشده پس از اجرای آزمون ترکیب کنید تا مطمئن شوید که درصد کل خطوط پوشش داده شده حتی زمانی که تمام پروندههای کد منبع در طول آزمون بارگذاری نشدهاند، صحیح است.
روال پیشنهادی هنگام ثبت دادهها برای یک مورد آزمون:
- 1.
- ایجاد پرونده داده پوشش پایه
# lcov -c -i -d appdir -o app_base.info
- 2.
- اجرای آزمون
# appdir/test
- 3.
- ایجاد پرونده داده پوشش آزمون
# lcov -c -d appdir -o app_test.info
- 4.
- ترکیب دادههای پوشش پایه و آزمون
# lcov -a app_base.info -a app_test.info -o app_total.info
چهار مرحله فوق معادل است با:
# lcov --capture --all -o app_total.info -d appdir
اگر پروژه شما شامل چند واحد کامپایل باشد که در هیچیک از برنامههای اجرایی یا کتابخانههای مشترک موارد آزمون استفاده نشده باشند - یعنی برخی پروندههای داده ‘.gcno’ (زمان کامپایل) وجود داشته باشند که پرونده داده ‘.gcda’ (زمان اجرا) متناظر ندارند - دادههای ترکیبی زمان کامپایل و زمان اجرا نتیجه متفاوتی نسبت به ثبت دادههای زمان اجرا به تنهایی ایجاد میکنند. در این حالت، گزارش فقط زمان اجرا شامل هیچ نقطه پوششی (coverpoint) از پروندههای استفادهنشده نخواهد بود، در حالی که این نقاط پوشش (با تعداد دفعات اجرای صفر) در گزارش ترکیبی ظاهر خواهند شد.
گزینه --initial به جز در حالت --capture نادیده گرفته میشود. در صورت مشخص شدن گزینه --initial ، گزینه --all نادیده گرفته خواهد شد.
-k subdirectory --kernel-directory subdirectory
اگر نمیخواهید دادههای پوشش را برای تمام کرنل دریافت کنید، بلکه فقط برای زیردایرکتوریهای خاص میخواهید، از این گزینه استفاده کنید. این گزینه میتواند بیش از یک بار مشخص شود.
توجه داشته باشید که بسته به نسخه پشتیبانی gcov در کرنل، ممکن است لازم باشد مسیر کامل زیردایرکتوری کرنل را مشخص کنید.
-l tracefile --list tracefile
در هر بار فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary قابل استفاده است.
--list-full-path --no-list-full-path
از –list-full-path برای نمایش مسیرهای کامل هنگام عملیات لیست، یا از –no-list-full-path برای نمایش مسیرهای کوتاه شده استفاده کنید. مسیرها به صورت پیشفرض کوتاه شده هستند.
--no-markers
--no-recursion
-o tracefile --output-file tracefile
برای استفاده از خروجی استاندارد، “-” را به عنوان نام پرونده مشخص کنید.
طبق قرارداد، پروندههای داده پوشش تولیدشده توسط lcov به عنوان «tracefile» شناخته میشوند و باید پسوند نام پرونده “.info” داشته باشند.
-v --verbose
پیامها به stdout فرستاده میشوند مگر اینکه هیچ پرونده خروجی وجود نداشته باشد (یعنی اگر دادههای پوشش به جای پرونده در stdout نوشته شوند)، که در این صورت به stderr فرستاده میشوند.
-q --quiet
کاهش پرگویی برای مثال پیامهای «پیشرفت» را سرکوب میکند - در حالی که پیامهای خطا و هشدار همچنان چاپ خواهند شد.
--debug
--parallel [integer] -j [integer]
همچنین به مدخلهای memory, memory_percentage, max_fork_fails و fork_fail_timeout در راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید. یک نمایه (profile) اجرای از پیش تولید شده میتواند به بهرهبرداری بهتر و اجرای موازی سریعتر کمک کند. بخشهای “–profile” و “–history” در این صفحه راهنما را ببینید.
--memory integer
این گزینه زمانی مفید است که محیط محاسباتی محدودیتهای شدیدی بر مصرف منابع اعمال میکند به طوری که اگر کار سعی کند فرآیندهای موازی بیش از حدی ایجاد کند، متوقف خواهد شد - اما کاربر از قبل نمیداند حداکثر مجاز چقدر است. این گزینه ابزار را قادر میسازد تا از حداکثر موازیسازی - تا حد تعیینشده توسط محدودیت حافظه - استفاده کند.
گزینه memory_percentage در پرونده پیکربندی روش دیگری برای تنظیم حداکثر مصرف حافظه ارائه میدهد. برای جزئیات به راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.
--rc keyword=value
از این گزینه برای مشخص کردن دستور keyword=value استفاده کنید که دستور پیکربندی متناظر را در پرونده پیکربندی lcovrc لغو و بازنویسی میکند. میتوانید این گزینه را بیش از یک بار مشخص کنید تا چندین دستور پیکربندی را بازنویسی کنید. برای مشاهده فهرستی از کلیدواژههای موجود و معنای آنها به راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.
-r tracefile pattern --remove tracefile pattern
اگر میخواهید دادههای پوشش را برای مجموعه خاصی از پروندهها از یک tracefile حذف کنید، از این سوییچ استفاده کنید. پارامترهای اضافی خط فرمان به عنوان الگوهای وایلدکارد پوسته تفسیر میشوند (توجه داشته باشید که ممکن است نیاز باشد آنها را به درستی اسکیپ کنید تا از گسترش زودهنگام توسط پوسته جلوگیری شود). هر مدخل پرونده در tracefile که با حداقل یکی از این الگوها مطابقت داشته باشد، حذف خواهد شد.
توجه: الگو باید به گونهای مشخص شود که با مسیر مطلق هر پرونده کد منبع مطابقت داشته باشد.
نتیجه عملیات حذف در خروجی استاندارد یا tracefile مشخصشده با -o نوشته خواهد شد.
در هر بار فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary قابل استفاده است.
--summary tracefile
توجه داشته باشید که میتوانید این گزینه را بیش از یک بار مشخص کنید.
در هر بار فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary قابل استفاده است.
--fail-under-branches percentage
--fail-under-lines percentage
-t testname --test-name testname
این نام یک مجموعه داده پوشش را زمانی که بیش از یک مجموعه داده در یک tracefile ترکیبی ادغام میشوند، مشخص میکند (گزینه -a را ببینید).
نامهای معتبر آزمون میتوانند شامل حروف، ارقام دهدهی و نویسه زیرخط (“_”) باشند.
--to-package package
اگر دستگاههای مجزایی برای ساخت و آزمون دارید و میخواهید ایجاد پرونده .info را روی دستگاه ساخت انجام دهید، از این گزینه استفاده کنید. برای انجام این کار، مراحل زیر را دنبال کنید:
روی دستگاه آزمون:
- اجرای آزمون
- اجرای lcov -c [-d directory] –to-package file
- کپی file به دستگاه ساخت
روی دستگاه ساخت:
- •
- اجرای lcov -c –from-package file [-o و سایر گزینهها]
این روش هم برای دادههای پوشش کرنل و هم فضای کاربر کار میکند. توجه داشته باشید که ممکن است لازم باشد مسیر دایرکتوری ساخت را با استفاده از -b همراه با –to-package یا –from-package مشخص کنید. همچنین توجه داشته باشید که دادههای بسته باید قبل از کامپایل مجدد برنامه به پرونده .info تبدیل شوند، در غیر این صورت نامعتبر خواهند شد.
--version
-z --zerocounters
به طور پیشفرض تلاش میکند شمارندههای اجرای کرنل را بازنشانی کند. از گزینه –directory برای بازنشانی تمام شمارندههای یک برنامه در فضای کاربر استفاده کنید.
در هر بار فقط یکی از گزینههای -z، -c، -a، -e، -r، -l، –diff یا –summary قابل استفاده است.
--tempdir dirname
فایلها (FILES)
/etc/lcovrc
~/.lcovrc
نویسنده (AUTHOR)
Peter Oberparleiter <<Peter.Oberparleiter@de.ibm.com>>
Henry Cox <<henry.cox@mediatek.com>>
همچنین ببینید (SEE ALSO)
lcovrc(5) <file://../man/lcovrc.5.html>, genhtml(1) <file://../man/genhtml.1.html>, geninfo(1) <file://../man/geninfo.1.html>, gendesc(1) <file://../man/gendesc.1.html>, gcov(1) <file://../man/gcov.1.html> llvm2lcov(1) <file://../man/llvm2lcov.1.html> py2lcov(1) <file://../man/py2lcov.1.html> perl2lcov(1) <file://../man/perl2lcov.1.html>
حق نشر (COPYRIGHT)
2024-2026, LCOV Project
| 2026-07-07 | 2.5 |