LCOV(1) LCOV LCOV(1)

lcov - ابزار گرافیکی و خط فرمانی استخراج و مدیریت پوشش کد GCOV

استخراج فایل ردگیری داده‌های پوشش کد (از داده‌های تولیدشده توسط کامپایلر). قالب فایل ردگیری 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

خروجی منعکس‌کننده

(اجتماع فایل‌های منطبق با lh_glob_patterns) اشتراک (اجتماع فایل‌های منطبق با rh_glob_patterns)

خواهد بود، به‌طوری که نقاط پوشش (coverpoints) یافت‌شده در هر دو مجموعه ادغام (جمع) می‌شوند، در حالی که نقاط پوشش یافت‌شده در تنها یکی از مجموعه‌ها کنار گذاشته می‌شوند. توجه داشته باشید که بلوک‌های انشعاب (branch blocks) یکسان در نظر گرفته می‌شوند اگر و فقط اگر شناسه بلوک و فهرست عبارات انشعاب مرتبط با آن‌ها یکسان باشد. توابع نیز در صورتی یکسان در نظر گرفته می‌شوند که نام و مکان آن‌ها یکسان باشد.

lcov --subtract *rh_glob_pattern*
    [ -o | --output-file *tracefile* ]
    lh_glob_pattern

خروجی منعکس‌کننده

(اجتماع فایل‌های منطبق با lh_glob_patterns) تفاضل (اجتماع فایل‌های منطبق با rh_glob_patterns)

خواهد بود، به‌طوری که فقط نقاط پوشش یافت‌شده در مجموعه سمت چپ نگهداری شده و سایر موارد حذف می‌شوند.

خلاصه‌سازی محتوای فایل ردگیری:

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* ]

برنامه lcov یک رابط کاربری گرافیکی برای ابزار آزمون پوشش کد gcov در GCC است. این ابزار داده‌های پوشش خطوط، توابع و انشعاب‌ها را برای چندین فایل منبع جمع‌آوری کرده و صفحات HTML شامل کدهای منبع حاشیه‌نویسی‌شده با اطلاعات پوشش کد را ایجاد می‌کند. همچنین صفحاتی برای نمای کلی جهت ناوبری آسان در ساختار فایل‌ها اضافه می‌نماید.

از lcov برای جمع‌آوری داده‌های پوشش و از genhtml برای ایجاد صفحات HTML استفاده کنید. داده‌های پوشش می‌توانند از هسته لینوکس در حال اجرا یا از برنامه‌های فضای کاربر جمع‌آوری شوند. برای انجام این کار، باید مراحل آماده‌سازی زیر را طی کنید:

برای پوشش کد هسته لینوکس:

دستورالعمل‌های راه‌اندازی زیرساخت gcov-kernel را دنبال کنید: https://docs.kernel.org/dev-tools/gcov.html

برای پوشش کد برنامه‌های فضای کاربر:

برنامه را با GCC و با استفاده از گزینه‌های «-fprofile-arcs» و «-ftest-coverage» یا «–coverage» کامپایل کنید.

لطفاً توجه داشته باشید که در این صفحه راهنما، قالب خروجی 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> مراجعه نمایید.

به‌طور کلی، (تقریباً) تمام گزینه‌های lcov را می‌توان در یک فایل پیکربندی نیز مشخص کرد - برای جزئیات به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

-a tracefile_patterns --add-tracefile tracefile_patterns

افزودن محتوای تمام فایل‌های منطبق با الگوی سراسری tracefile_patterns.

با استفاده از گزینه -a چندین فایل ردگیری (tracefile) را مشخص کنید تا داده‌های پوشش موجود در این فایل‌ها با جمع زدن تعداد دفعات اجرا برای ترکیب‌های منطبق تست و نام فایل با یکدیگر ترکیب شوند.

نتیجه عملیات افزودن در خروجی استاندارد (stdout) یا فایل ردگیری مشخص‌شده با -o نوشته خواهد شد.

در هر زمان فقط یکی از گزینه‌های -z، -c، -a، -e، -r، -l یا –summary را می‌توان مشخص کرد.

-b directory --base-directory 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

جستجو برای فایل‌های داده .gcno از build_directory به‌جای جستجو در کنار فایل متناظر .gcda.

برای جزئیات بیشتر به صفحه راهنمای geninfo(1) <file://../man/geninfo.1.html> مراجعه کنید.

--source-directory dirname

افزودن ‘dirname’ به فهرست مکان‌های جستجوی فایل‌های منبع.

برای مسیرهای نسبی فایل‌های منبع فهرست‌شده در به‌عنوان مثال مسیرهای یافت‌شده در tracefile، یا یافت‌شده در خروجی gcov در حین –capture - احتمالاً پس از اعمال جایگزینی‌ها - ابزار lcov ابتدا مسیر را از ‘cwd’ (جایی که genhtml فراخوانی شده است) و سپس از هر نام دایرکتوری جایگزین به ترتیب مشخص‌شده جستجو خواهد کرد. نخستین مکان منطبق استفاده می‌شود.

این گزینه می‌تواند چندین بار مشخص شود تا دایرکتوری‌های بیشتری به مسیر جستجوی منبع افزوده شود.

-c --capture

ضبط داده‌های پوشش زمان اجرا (runtime).

به‌طور پیش‌فرض تعداد دفعات اجرای جاری هسته را ضبط کرده و داده‌های پوشش حاصل را در خروجی استاندارد می‌نویسد. از گزینه –directory برای ضبط شمارنده‌ها برای یک برنامه فضای کاربری استفاده کنید.

نتیجه عملیات ضبط در stdout یا فایل ردگیری مشخص‌شده با -o نوشته خواهد شد.

هنگام ترکیب با فلگ --all هر دو پوشش زمان اجرا و زمان کامپایل در یک مرحله استخراج خواهند شد. توضیحات مربوط به فلگ --initial در زیر را ببینید.

برای جزئیات بیشتر درباره فرآیند ضبط و گزینه‌ها و پارامترهای موجود به صفحه راهنمای geninfo(1) <file://../man/geninfo.1.html>) مراجعه کنید.

در هر زمان فقط یکی از گزینه‌های -z، -c، -a، -e، -r، -l، –diff یا –summary را می‌توان مشخص کرد.

--branch-coverage

جمع‌آوری و/یا نگه‌داری داده‌های پوشش انشعاب (branch coverage).

این معادل استفاده از گزینه “–rc branch_coverage=1” است؛ این گزینه برای سازگاری بهتر با رابط genhtml اضافه شده است.

--mcdc-coverage

جمع‌آوری و نگه‌داری داده‌های MC/DC.

این معادل استفاده از گزینه “–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

اگر در حال ضبط داده‌های پوشش برای پروژه‌ای هستید که با استفاده از مکانیزم libtool ساخته شده است، این حالت را فعال کنید. همچنین –compat-libtool را ببینید.

مقدار پیش‌فرض برای این تنظیم ‘on’ است.

hammer

اگر در حال ضبط داده‌های پوشش برای پروژه‌ای هستید که با استفاده از نگارشی از GCC 3.3 که شامل یک اصلاحیه (وصله hammer) از نگارش‌های بعدی GCC است ساخته شده است، این حالت را فعال کنید. می‌توانید یک GCC 3.3 اصلاح‌شده را با بررسی دایرکتوری ساخت پروژه خود برای فایل‌های دارای پسوند ‘.bbg’ شناسایی کنید. نگارش‌های اصلاح‌نشده GCC 3.3 این فایل‌ها را ‘.bb’ نام‌گذاری می‌کنند.

مقدار پیش‌فرض برای این تنظیم ‘auto’ است.

split_crc

اگر در حال ضبط داده‌های پوشش برای پروژه‌ای هستید که با استفاده از نگارشی از GCC 4.6 که شامل یک اصلاحیه (چکسام‌های تابع تقسیم‌شده یا split function checksums) از نگارش‌های بعدی GCC است ساخته شده است، این حالت را فعال کنید. پیام‌های خطای متداول هنگام اجرای lcov روی داده‌های پوشش تولیدشده توسط چنین نگارش‌هایی از GCC عبارتند از ‘out of memory’ و ‘reached unexpected end of file’.

مقدار پیش‌فرض برای این تنظیم ‘auto’ است.

--compat-libtool --no-compat-libtool

مشخص کردن اینکه آیا حالت سازگاری libtool فعال شود یا خیر.

از –compat-libtool برای فعال‌سازی حالت سازگاری libtool یا از –no-compat-libtool برای غیرفعال کردن آن استفاده کنید. حالت سازگاری libtool به‌طور پیش‌فرض فعال است.

هنگامی که حالت سازگاری libtool فعال باشد، lcov فرض می‌کند که کد منبع مربوط به یک فایل .da واقع در دایرکتوری با نام “.libs” را می‌توان در دایرکتوری والد آن پیدا کرد.

اگر در محیط ساخت خود دایرکتوری‌هایی با نام “.libs” دارید اما از libtool استفاده نمی‌کنید، این گزینه را غیرفعال کنید تا از بروز مشکل هنگام ضبط داده‌های پوشش جلوگیری شود.

--config-file config-file

مشخص کردن فایل پیکربندی برای استفاده. برای جزئیات مربوط به قالب فایل و گزینه‌ها به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید. همچنین مدخل config_file در همان صفحه راهنما را برای جزئیات در مورد نحوه گنجاندن یک فایل کانفیگ در فایل دیگر مشاهده کنید.

هنگامی که این گزینه مشخص شود، نه فایل پیکربندی سراسری سیستم /etc/lcovrc و نه فایل پیکربندی ویژه هر کاربر ~/.lcovrc خوانده نخواهد شد.

این گزینه ممکن است زمانی مفید باشد که نیاز به اجرای همزمان چند نمونه از lcov با گزینه‌های مختلف فایل پیکربندی وجود داشته باشد.

توجه داشته باشید که این گزینه باید به‌طور کامل مشخص شود - مخفف‌سازی پشتیبانی نمی‌شود.

--profile [profile-data-file]

دستور دادن به ابزار برای ردیابی عملکرد و سایر داده‌های پیکربندی. اگر فایل اختیاری profile-data-file مشخص نشود، داده‌های پروفایل در فایلی با همان نام پایه –output-filename همراه با پسوند الحاق‌شده “.json” نوشته می‌شوند. داده‌های پروفایل زمانی مفید هستند که در حال تلاش برای بهینه‌سازی پیاده‌سازی lcov باشید (به $LCOV_ROOT/share/lcov/support-scripts/spreadsheet.py مراجعه کنید)، و همچنین می‌توانند اجرای سریع‌تر –parallel را ممکن سازند (بخش “–history-script” از این صفحه راهنما را ببینید).

--history-script callback

استفاده از callback برای پیش‌بینی هزینه زمان اجرای فعلی با استفاده از هزینه مشاهده‌شده در اجرای پیشین.

برای اطلاعات بیشتر به صفحه راهنمای genhtml(1) <file://../man/genhtml.1.html> مراجعه کنید.

در هر زمان فقط یکی از گزینه‌های -z، -c، -a، -e، -r، -l، –diff یا –summary را می‌توان مشخص کرد.

-d directory --directory directory

استفاده از فایل‌های .da در directory به‌جای هسته.

اگر می‌خواهید روی داده‌های پوشش برای یک برنامه فضای کاربری کار کنید، از این گزینه برای تعیین مکانی که برنامه در آن کامپایل شده است استفاده کنید (اینجاست که فایل‌های شمارنده با پسوند .da ذخیره می‌شوند).

توجه داشته باشید که می‌توانید این گزینه را بیش از یک بار مشخص کنید.

--exclude pattern

مستثنی کردن فایل‌های مبدأ منطبق با pattern.

اگر می‌خواهید داده‌های پوشش را برای مجموعه خاصی از فایل‌های مبدأ منطبق با هر یک از الگوهای داده‌شده مستثنی کنید، از این سوییچ استفاده کنید. با استفاده از چندین سوییچ خط فرمان --exclude می‌توان چندین الگو را مشخص کرد. patternها به عنوان الگوهای وایلدکارت شل تفسیر خواهند شد (توجه داشته باشید که ممکن است لازم باشد برای جلوگیری از بسط اولیه آن‌ها توسط شل، به درستی اسکیپ شوند).

نکته: الگو باید طوری مشخص شود که با مسیر مطلق (absolute) هر فایل مبدأ مطابقت داشته باشد. اگر الگویی را مشخص کنید که به نظر می‌رسد به درستی اعمال نمی‌شود - فایل‌هایی که انتظار داشتید مستثنی شوند همچنان در خروجی ظاهر می‌شوند - می‌توانید به دنبال پیام‌های هشدار در فایل لاگ بگردید. lcov برای هر الگویی که حداقل یک بار اعمال نشود، یک هشدار صادر می‌کند.

می‌تواند با سوییچ خط فرمان --include ترکیب شود. اگر یک فایل مشخص هم با الگوی include و هم با الگوی exclude مطابقت داشته باشد، الگوی exclude اولویت خواهد داشت.

--erase-functions regexp

مستثنی کردن داده‌های پوشش از خطوطی که در درون تابعی قرار دارند که نام آن با عبارت منظم (regexp) ارائه‌شده مطابقت دارد. توجه داشته باشید که این نام با توجه به استفاده یا عدم استفاده از گزینه –demangle-cpp، می‌تواند نام درهم‌ریخته (mangled) یا بازسازی‌شده (demangled) باشد.

توجه داشته باشید که این گزینه نیازمند استفاده از نسخه‌ای از gcc است که به اندازه کافی جدید باشد تا از گزارش خط شروع/پایان تابع پشتیبانی کند، یا اینکه ابزار را برای استخراج داده‌های لازم پیکربندی کنید - به بحث derive_function_end_line در صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

--substitute regexp_pattern

اعمال عبارت منظم پرل regexp_pattern روی نام فایل‌های مبدأ یافت‌شده در حین پردازش. این گزینه برای مثال زمانی مفید است که نام مسیر گزارش‌شده توسط gcov با چیدمان مبدأ شما مطابقت ندارد و فایل پیدا نمی‌شود، یا در محیط‌های پیچیده‌تری که در آن‌ها ساختار دایرکتوری بیلد با چیدمان کد منبع یا چیدمان در سیستم کنترل نسخه پروژه مطابقت ندارد.

از این گزینه در شرایطی استفاده کنید که 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

مستثنی کردن داده‌های پوشش از خطوطی که محتوای آن‌ها با 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

در صورت غیرصفر بودن، نادیده گرفتن نام‌های موارد آزمون (testcase) در فایل info. - یعنی، رفتار با تمام داده‌های پوشش به گونه‌ای که گویی از همان مورد آزمون آمده‌اند. اگر کاربر در گزارش‌های پوشش نیازی به خلاصه پوشش بر اساس هر مورد آزمون نداشته باشد، این کار ممکن است کارایی را بهبود بخشیده و مصرف حافظه را کاهش دهد.

این گزینه همچنین می‌تواند به صورت دائمی با استفاده از گزینه فایل پیکربندی forget_testcase_names پیکربندی شود.

--prune-tests

تعیین فهرست فایل‌های ردگیری (tracefiles) یکتا.

از این گزینه برای تعیین فهرستی از فایل‌های ردگیری یکتا از میان فهرست مشخص‌شده توسط --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

استفاده از script برای جمع‌آوری اطلاعات تکمیلی درباره زمینه اجرای ابزار - جهت کمک به اشکال‌زدایی زیرساخت و/یا رهگیری.

برای جزئیات بیشتر درباره اسکریپت زمینه (context script)، به صفحه راهنمای genhtml مراجعه کنید.

--criteria-script script

استفاده از script برای آزمودن معیارهای پذیرش پوشش آزمون.

برای جزئیات بیشتر درباره اسکریپت معیارها، صفحه راهنمای genhtml را ببینید. توجه داشته باشید که lcov اطلاعات تاریخ و مالک را ردیابی نمی‌کند (به مدخل –annotate-script در صفحه راهنمای genhtml مراجعه کنید) - بنابراین این اطلاعات به بازخوانی (callback) lcov منتقل نمی‌شوند.

--resolve-script script

استفاده از script برای یافتن مسیر فایلی از برخی فایل‌های منبع که در یک فایل داده ورودی ظاهر می‌شود، در صورتی که فایل پس از اعمال الگوهای –substitute و جستجو در فهرست –source-directory یافت نشود. این گزینه معادل گزینه پیکربندی resolve_script است. برای جزئیات به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

--version-script script

استفاده از script برای دریافت شناسه نسخه فایل منبع از سیستم کنترل نسخه هنگام استخراج داده‌ها، و مقایسه شناسه‌های نسخه به منظور بررسی خطا هنگام ادغام فایل‌های .info.

برای جزئیات بیشتر درباره اسکریپت نسخه، صفحه راهنمای genhtml را ببینید.

--unreachable-script module

استفاده از module برای تصمیم‌گیری درباره اینکه آیا عبارات شرطی شاخه‌ای خاص و/یا شرایط MC/DC باید از گزارش پوشش آزمون حذف شوند یا خیر. این گزینه معادل گزینه پیکربندی unreachable_script است. برای جزئیات به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

توجه داشته باشید که “module” الزاماً باید یک ماژول Perl باشد.

برای جزئیات بیشتر، صفحه راهنمای genhtml را ببینید.

--comment comment_string

افزودن comment_string به انتهای فهرست یادداشت‌های درج‌شده در فایل نتیجه خروجی. این گزینه می‌تواند چندین بار مشخص شود. یادداشت‌ها در بالای فایل و به همان ترتیبی که مشخص شده‌اند چاپ می‌شوند.

یادداشت‌ها می‌توانند برای مستندسازی شرایطی که فایل ردگیری تحت آن تولید شده مفید باشند: میزبان، تاریخ، محیط و غیره.

توجه داشته باشید که این گزینه برای عملیات‌های lcov که فایل نتیجه خروجی نمی‌نویسند هیچ تاثیری ندارد: –list –summary، –prune-tests، و –map-functions.

برای شرح قالب یادداشت‌ها در فایل نتیجه، به صفحه راهنمای geninfo مراجعه کنید.

-e tracefile pattern --extract tracefile pattern

استخراج داده‌ها از tracefile.

اگر می‌خواهید داده‌های پوشش آزمون را تنها برای مجموعه‌ای خاص از فایل‌ها از یک فایل ردگیری استخراج کنید، از این سوییچ استفاده نمایید. پارامترهای خط فرمان اضافی به عنوان الگوهای وایلدکارت شل تفسیر خواهند شد (توجه داشته باشید که ممکن است لازم باشد به شکل مناسب اسکیپ شوند تا از بسط زودهنگام توسط شل جلوگیری شود). هر مدخل فایل در tracefile که حداقل با یکی از آن الگوها مطابقت داشته باشد استخراج خواهد شد.

توجه: الگو باید طوری مشخص شود که با مسیر مطلق هر فایل منبع مطابقت داشته باشد.

نتیجه عملیات استخراج در stdout یا فایل ردگیری مشخص‌شده با -o نوشته خواهد شد.

در هر بار فقط یکی از گزینه‌های -z، -c، -a، -e، -r، -l، –diff یا –summary را می‌توان مشخص کرد.

-f --follow

دنبال کردن پیوندها هنگام جستجوی فایل‌های .da.

--large-file regexp

برای جزئیات بیشتر به بخش –large-file در صفحه راهنمای geninfo(1) <file://../man/geninfo.1.html> مراجعه کنید.

--from-package package

استفاده از فایل‌های .da موجود در package به جای هسته یا دایرکتوری.

اگر ماشین‌های جداگانه‌ای برای ساخت و آزمایش دارید و می‌خواهید ایجاد فایل .info را روی ماشین ساخت انجام دهید، از این گزینه استفاده کنید. برای اطلاعات بیشتر به –to-package مراجعه کنید.

--sort-input

مشخص می‌کند که آیا نام فایل‌ها قبل از ضبط و/یا تجمیع مرتب شوند یا خیر. مرتب‌سازی تفاوت‌های خروجی وابسته به ترتیب پردازش را کاهش می‌دهد. به بخش sort_input در صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

--gcov-tool tool

تعیین مکان ابزار gcov.

برای جزئیات بیشتر، صفحه راهنمای geninfo را ببینید.

-h --help

چاپ متن راهنمای کوتاه و سپس خروج.

--include pattern

شامل کردن فایل‌های منبع مطابق با pattern.

اگر می‌خواهید داده‌های پوشش آزمون را فقط برای مجموعه خاصی از فایل‌های منبع که با هر یک از الگوهای داده‌شده مطابقت دارند شامل کنید، از این سوییچ استفاده نمایید. با استفاده از چندین سوییچ خط فرمان --include می‌توان چندین الگو را مشخص کرد. patterns به عنوان الگوهای وایلدکارت شل تفسیر خواهند شد (توجه داشته باشید که ممکن است برای جلوگیری از بسط آنها توسط شل، نیاز به اسکیپ مناسب باشد).

توجه: الگو باید به گونه‌ای مشخص شود که با مسیر مطلق هر فایل منبع مطابقت داشته باشد.

اگر الگویی مشخص کنید که به نظر نمی‌رسد به درستی اعمال شود - فایل‌هایی که انتظار داشتید در خروجی گنجانده شوند ظاهر نشوند - ابزار lcov یک پیام خطای نوع ‘unused’ تولید خواهد کرد. برای چگونگی نادیده گرفتن خطا یا تبدیل آن به یک هشدار توسط lcov، به گزینه –ignore-errors مراجعه کنید.

--msg-log [log_file_name]

مشخص کردن مکان ذخیره پیام‌های خطا و هشدار (علاوه بر نوشتن در STDERR). اگر log_file_name مشخص نشود، از مکان پیش‌فرض استفاده می‌شود.

--ignore-errors errors

مشخص کردن فهرستی از خطاها که پس از آنها پردازش باید ادامه یابد.

از این گزینه برای مشخص کردن فهرستی از یک یا چند دسته از خطاها استفاده کنید که lcov پس از آنها به جای توقف، باید پردازش را ادامه دهد. توجه داشته باشید که ابزار یک هشدار (به جای خطای مهلک) تولید خواهد کرد، مگر اینکه دو (یا چند) بار خطا را نادیده بگیرید:

lcov ... --ignore-errors source,source ...

errors می‌تواند فهرستی از کلمات کلیدی زیر باشد که با کاما از هم جدا شده‌اند:

branch

شناسه شاخه (فیلد دوم در مدخل ‘BRDA’ فایل .info) از توالی عددی صحیح مورد انتظار پیروی نمی‌کند.

callback

خطای اسکریپت نسخه.

child

فرایند فرزند در حین اجرای –parallel کد خروج غیر صفر برگردانده است. این معمولاً نشان می‌دهد که فرزند با خطایی مواجه شده است: فایل گزارش را بلافاصله بالای این پیام بررسی کنید. در مقابل: خطای parallel نشان‌دهنده یک استثنای غیرمنتظره/کنترل‌نشده در فرایند فرزند است - نه یک خطای ‘معمول’ lcov.

corrupt

فایل خراب/غیرقابل‌خواندن یافت شد.

count

تعداد بیش از حدی از پیام‌های یک دسته گزارش شده است - پیام‌های بعدی از آن نوع سرکوب خواهند شد. این حد را می‌توان توسط متغیر ‘max_message_count’ کنترل کرد. به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

deprecated

شما از یک گزینه منسوخ‌شده استفاده می‌کنید. این گزینه در نسخه‌های آینده حذف خواهد شد - بنابراین باید اسکریپت‌های خود را همین حالا اصلاح کنید.

empty

فایل داده .info خالی است (برای مثال، به دلیل اینکه تمام کد ‘حذف’ یا مستثنی شده است).

excessive

داده‌های پوشش آزمون شما شامل تعداد دفعات اجرای (‘hit’) به طور مشکوکی بالاست که بعید است صحیح باشد - این امر احتمالاً نشان‌دهنده یک باگ در زنجیره ابزار شماست. برای جزئیات به بخش excessive_count_threshold در صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید.

fork

عدم توانایی در ایجاد فرایند فرزند در حین اجرای –parallel.

اگر پیام نادیده گرفته شود ( –ignore-errors fork )، ابزار genhtml مدتی کوتاه منتظر می‌ماند و سپس اجرای ناموفق را مجدداً تلاش می‌کند.

اگر خطاهای مداوم مشاهده می‌کنید، یا موازی‌سازی را غیرفعال کرده یا کاهش دهید، یک محدودیت حافظه تعیین کنید، یا سرور بزرگ‌تری برای اجرای کار بیابید.

format

نحو یا مقدار غیرمنتظره در فایل .info یافت شد - برای مثال، برخورد با عدد منفی یا شماره خط صفر.

gcov

ابزار gcov با یک کد بازگشتی غیر صفر خارج شد.

graph

فایل گراف یافت نشد یا خراب است.

inconsistent

داده‌های پوشش آزمون شما از نظر داخلی ناسازگار هستند: دو یا چند ادعای متناقض و مانعة‌الجمع دارند. برای مثال، یک عبارت هم به عنوان شاخه استثنا و هم به عنوان غیر استثنا علامت‌گذاری شده است. (برای جزئیات بیشتر به صفحه راهنمای genhtml(1) <file://../man/genhtml.1.html> مراجعه کنید).

internal

مشکل داخلی در ابزار شناسایی شد. لطفاً این باگ را به همراه یک مورد آزمایشی گزارش دهید.

mismatch

مدخل‌های ناسازگار در فایل ردگیری یافت شد:
  • عبارت شاخه (فیلد ۳ در مدخل ‘BRDA’ فایل .info) از داده‌های ادغام همخوانی ندارد، یا
  • تعداد دفعات اجرای تابع (FNDA:…) وجود دارد اما اعلان تابع (FN:…) یافت نمی‌شود.

missing

فایل وجود ندارد یا قابل خواندن نیست.

negative

تعداد دفعات اجرای (‘hit’) منفی یافت شد.

توجه داشته باشید که مقادیر منفی ممکن است ناشی از یک باگ شناخته‌شده GCC باشند - ببینید:

و کامپایل با “-fprofile-update=atomic” را امتحان کنید. باید مجدداً کامپایل کرده، آزمون‌های خود را دوباره اجرا نمایید و داده‌های پوشش را مجدداً ضبط کنید.

package

یک بسته پرل لازم روی سیستم شما نصب نیست. در برخی موارد، امکان نادیده گرفتن این پیام و ادامه دادن وجود دارد - با این حال، قابلیت‌های خاصی در این صورت غیرفعال خواهند شد.

parallel

انواع مختلف خطاهای مربوط به موازی‌سازی - یعنی یک فرایند فرزند به دلیل خطا متوقف شده است. پیام خطای مربوطه در فایل لاگ دقیقاً قبل از خطای parallel ظاهر می‌شود.

اگر خطایی در رابطه با اجرای موازی مشاهده می‌کنید که نامعتبر به نظر می‌رسد، بهتر است فلگ –parallel را برداشته و دوباره تلاش کنید. اگر حذف این فلگ منجر به نتیجه متفاوتی شد، لطفاً مشکل را (به همراه یک مورد آزمایشی) گزارش دهید تا ابزار اصلاح شود.

parent

فرایند والد در حین فعال بودن فرایند فرزند در جریان اجرای –parallel خارج شد. این اتفاق زمانی رخ می‌دهد که والد با یک خطای مهلک مواجه شده باشد - برای مثال خطایی در یک فرزند دیگر که نادیده گرفته نشده است. این فرزند نمی‌تواند بدون والد خود به کار ادامه دهد - و بنابراین خارج خواهد شد.

range

داده‌های پوشش به شماره خطی اشاره می‌کنند که بزرگتر از تعداد خطوط فایل منبع است. این امر می‌تواند ناشی از عدم تطابق نسخه یا مشکلی در داده‌های gcov باشد.

source

فایل کد منبع برای یک مجموعه داده یافت نشد.

unreachable

یک نقطه پوشش (خط، شاخه، تابع یا MC/DC) درون یک ناحیه “دست‌نیافتنی” اجرا شده است (hit خورده است)؛ یا کد، یا جایگذاری دستورالعمل، یا هر دو اشتباه هستند. اگر خطا نادیده گرفته شود، بسته به مقدار پارامتر پیکربندی retain_unreachable_coverpoints_if_executed نقطه پوشش خطاکار حفظ می‌شود (مستثنی نمی‌شود) یا حذف می‌گردد. برای اطلاعات بیشتر به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> و بخش “Exclusion markers” در صفحه راهنمای geninfo(1) <file://../man/geninfo.1.html> مراجعه کنید.

unsupported

قابلیت درخواست‌شده برای پیکربندی این ابزار پشتیبانی نمی‌شود. به عنوان مثال، استثناهای محدوده خطوط شروع/پایان تابع از برخی قابلیت‌های GCOV استفاده می‌کنند که در نسخه‌های قدیمی‌تر GCC در دسترس نیستند.

unused

الگوی include/exclude/erase/omit/substitute با هیچ مسیر فایلی مطابقت نداشت.

usage

استفاده پشتیبانی‌نشده شناسایی شد - برای مثال ترکیب پشتیبانی‌نشده‌ای از گزینه‌ها.

utility

ابزاری که در حین پردازش فراخوانی شده کد خطا برگردانده است (برای مثال، ابزار ‘find’ با یک پوشه غیرقابل خواندن مواجه شده است).

version

شناسه‌های کنترل نسخه فایلی که در تلاش برای ادغام آن هستیم یکسان نیستند - شماره‌گذاری خطوط و سایر اطلاعات ممکن است نادرست باشند.

همچنین برای بررسی پارامتر ‘max_message_count’ که می‌توان از آن برای کنترل تعداد هشدارهای صادرشده پیش از سرکوب تمام پیام‌های بعدی استفاده کرد، به صفحه راهنمای lcovrc(5) <file://../man/lcovrc.5.html> مراجعه کنید. از این کار می‌توان برای کاهش حجم فایل لاگ استفاده کرد.

--expect-message-count message_type:expr[,message_type:expr]

به lcov یک محدودیت روی تعداد پیام‌های یک یا چند نوع که انتظار می‌رود در طول اجرا تولید شوند، اعمال کنید. اگر این شرط درست نباشد، خطایی از نوع “count” (به بالا مراجعه کنید) ایجاد می‌شود.

برای جزئیات بیشتر درباره این گزینه به راهنمای 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

مشخص کردن فهرستی از فیلترهای coverpoint برای اعمال روی داده‌های ورودی. برای جزئیات به صفحه راهنمای genhtml مراجعه کنید.

--demangle-cpp [param]

نام‌های توابع C++ را ساده‌سازی و رمزگشایی (Demangle) کنید. برای جزئیات به صفحه راهنمای genhtml مراجعه کنید.

-i --initial

ثبت داده‌های اولیه پوشش با مقدار صفر - یعنی از پرونده‌های داده ‘.gcno’ زمان کامپایل. همچنین گزینه --all را ببینید، که به ابزار می‌گوید داده‌های زمان کامپایل (‘.gcno’) و زمان اجرا (‘.gcda’) را به طور همزمان ثبت کند.

پیش از اجرای هر مورد آزمون، 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

ثبت داده‌های پوشش کرنل فقط از subdirectory.

اگر نمی‌خواهید داده‌های پوشش را برای تمام کرنل دریافت کنید، بلکه فقط برای زیردایرکتوری‌های خاص می‌خواهید، از این گزینه استفاده کنید. این گزینه می‌تواند بیش از یک بار مشخص شود.

توجه داشته باشید که بسته به نسخه پشتیبانی gcov در کرنل، ممکن است لازم باشد مسیر کامل زیردایرکتوری کرنل را مشخص کنید.

-l tracefile --list tracefile

فهرست کردن محتویات 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

اگر می‌خواهید داده‌های پوشش را بدون توجه به نشانگرهای استثنا (exclusion markers) در پرونده کد منبع دریافت کنید، از این گزینه استفاده کنید. برای جزئیات در مورد نشانگرهای استثنا به geninfo (1) مراجعه کنید.

--no-recursion

اگر می‌خواهید داده‌های پوشش را فقط برای دایرکتوری مشخص‌شده بدون پردازش زیردایرکتوری‌ها دریافت کنید، از این گزینه استفاده کنید.

-o tracefile --output-file tracefile

نوشتن داده‌ها در tracefile به جای خروجی استاندارد (stdout).

برای استفاده از خروجی استاندارد، “-” را به عنوان نام پرونده مشخص کنید.

طبق قرارداد، پرونده‌های داده پوشش تولیدشده توسط lcov به عنوان «tracefile» شناخته می‌شوند و باید پسوند نام پرونده “.info” داشته باشند.

-v --verbose

افزایش پرگویی (verbosity) پیام‌های اطلاعاتی. این عمدتاً برای اشکال‌زدایی اسکریپت و/یا جریان کار استفاده می‌شود - برای مثال، برای پی بردن به اینکه کدام پرونده داده در کجا پیدا شده است. همچنین گزینه –quiet را ببینید.

پیام‌ها به stdout فرستاده می‌شوند مگر اینکه هیچ پرونده خروجی وجود نداشته باشد (یعنی اگر داده‌های پوشش به جای پرونده در stdout نوشته شوند)، که در این صورت به stderr فرستاده می‌شوند.

-q --quiet

کاهش پرگویی پیام‌های اطلاعاتی.

کاهش پرگویی برای مثال پیام‌های «پیشرفت» را سرکوب می‌کند - در حالی که پیام‌های خطا و هشدار همچنان چاپ خواهند شد.

--debug

افزایش پرگویی «پیام‌های اشکال‌زدایی». این ویژگی در درجه اول برای توسعه‌دهندگانی مفید است که می‌خواهند مجموعه ابزار lcov را بهبود دهند.

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

مشخص کردن حداکثر مقدار حافظه مورد استفاده در طول پردازش موازی، بر حسب مگابایت. در عمل، در صورتی که این حد فراتر رود، فرآیند fork() انجام نمی‌شود. مقدار پیش‌فرض 0 (صفر) است - به این معنی که هیچ محدودیتی وجود ندارد.

این گزینه زمانی مفید است که محیط محاسباتی محدودیت‌های شدیدی بر مصرف منابع اعمال می‌کند به طوری که اگر کار سعی کند فرآیندهای موازی بیش از حدی ایجاد کند، متوقف خواهد شد - اما کاربر از قبل نمی‌داند حداکثر مجاز چقدر است. این گزینه ابزار را قادر می‌سازد تا از حداکثر موازی‌سازی - تا حد تعیین‌شده توسط محدودیت حافظه - استفاده کند.

گزینه 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 که با حداقل یکی از این الگوها مطابقت داشته باشد، حذف خواهد شد.

توجه: الگو باید به گونه‌ای مشخص شود که با مسیر مطلق هر پرونده کد منبع مطابقت داشته باشد.

نتیجه عملیات حذف در خروجی استاندارد یا tracefile مشخص‌شده با -o نوشته خواهد شد.

در هر بار فقط یکی از گزینه‌های -z، -c، -a، -e، -r، -l، –diff یا –summary قابل استفاده است.

--summary tracefile

نمایش خلاصه اطلاعات پوشش برای tracefile مشخص‌شده.

توجه داشته باشید که می‌توانید این گزینه را بیش از یک بار مشخص کنید.

در هر بار فقط یکی از گزینه‌های -z، -c، -a، -e، -r، -l، –diff یا –summary قابل استفاده است.

--fail-under-branches percentage

از این گزینه استفاده کنید تا به lcov دستور دهید در صورتی که پوشش کل شاخه‌ها کمتر از percentage باشد، با وضعیت خروج 1 خارج شود.

--fail-under-lines percentage

از این گزینه استفاده کنید تا به lcov دستور دهید در صورتی که پوشش کل خطوط کمتر از percentage باشد، با وضعیت خروج 1 خارج شود.

-t testname --test-name testname

مشخص کردن نام آزمون برای ذخیره در tracefile.

این نام یک مجموعه داده پوشش را زمانی که بیش از یک مجموعه داده در یک tracefile ترکیبی ادغام می‌شوند، مشخص می‌کند (گزینه -a را ببینید).

نام‌های معتبر آزمون می‌توانند شامل حروف، ارقام ده‌دهی و نویسه زیرخط (“_”) باشند.

--to-package package

ذخیره پرونده‌های .da برای پردازش‌های بعدی.

اگر دستگاه‌های مجزایی برای ساخت و آزمون دارید و می‌خواهید ایجاد پرونده .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

نوشتن داده‌های موقت و میانی در دایرکتوری مشخص‌شده. مقدار پیش‌فرض “/tmp” است.

/etc/lcovrc

پرونده پیکربندی سراسری سیستم.

~/.lcovrc

پرونده پیکربندی اختصاصی هر کاربر.

Peter Oberparleiter <<Peter.Oberparleiter@de.ibm.com>>

Henry Cox <<henry.cox@mediatek.com>>

بخش‌های فیلترسازی، مدیریت خطا، اجرای موازی.

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>

https://github.com/linux-test-project/lcov

2024-2026, LCOV Project

2026-07-07 2.5