Provided by: lcov_2.0-4ubuntu2_all bug

NAME

       genhtml - Generate HTML view from LCOV coverage data files

SYNOPSIS

       genhtml [-h|--help] [--version]
               [-q|--quiet] [-v|--verbose] [--debug]
               [-s|--show-details]
               [-f|--frames]
               [-b|--baseline-file] baseline-file
               [-o|--output-directory output-directory]
               [--header-title banner]
               [--footer string]
               [-t|--title title]
               [-d|--description-file description-file]
               [-k|--keep-descriptions] [-c|--css-file css-file]
               [-p|--prefix prefix] [--no-prefix]
               [--source-directory dirname]
               [--no-source] [--num-spaces num] [--highlight]
               [--legend] [--html-prolog prolog-file]
               [--html-epilog epilog-file] [--html-extension extension]
               [--html-gzip] [--sort] [--no-sort]
               [--function-coverage] [--no-function-coverage]
               [--branch-coverage] [--no-branch-coverage]
               [--demangle-cpp [param]]
               [--ignore-errors errors]
               [--keep-going] [--config-file config-file] [--rc keyword=value]
               [--precision num] [--missed]
               [--suppress-aliases]
               [--forget-test-names]
               [--dark-mode]
               [--baseline-file baseline-file]
               [--baseline-title title]
               [--baseline-date date]
               [--current-date date]
               [--diff-file diff-file]
               [--annotate-script script]
               [--criteria-script script]
               [--version-script script]
               [--checksum]
               [--new-files-as-baseline]
               [--elide-path-mismatch]
               [--synthesize-missing]
               [--date-bins day[,day,...]]
               [--show-owners [all]]
               [--show-noncode]
               [--show-zero-columns]
               [--show-navigation]
               [--show-proportions]
               [--simplified-colors]
               [--hierarchical] [--flat]
               [--filter filters]
               [--include glob_pattern]
               [--exclude glob_pattern]
               [--erase-functions regexp_pattern]
               [--substitute regexp_pattern]
               [--omit-lines regexp_pattern]
               [--parallel|-j [integer]]
               [--memory integer_num_Mb]
               [--tempdir dirname]
               [--preserve]
               [--save]
               tracefile(s)

DESCRIPTION

       genhtml creates an HTML view of coverage data tracefiles generated by the geninfo and lcov
       tools. Features include:

       •  Differential coverage comparison against baseline coverage data

       •  Annotation of reports with date and owner information ("binning")

       The basic concepts of differential coverage and date/owner binning are  described  in  the
       paper found at https://arxiv.org/abs/2008.07947

   Differential coverage
       Differential  coverage compares two versions of source code - the baseline and the current
       versions - and the coverage results for each to segment the code into categories.

       To create a differential coverage report, genhtml requires

       1. a baseline-file specified via --baseline-file, and

       2. a patch file in unified format specified using --diff-file.

       Note that while tracefile may be a list of  filenames,  baseline-file  must  be  a  single
       consolidated file.

       The  difference in coverage between tracefile and baseline-file is classified line-by-line
       into categories based on changes in 2 aspects:

       1. Test coverage results: a line of code can be tested (1), untested (0), or  unused  (#).
          An  unused line is a source code line that has no associated coverage data, for example
          due to a disabled #ifdef statement.

       2. Source code changes: a line can be unchanged, added (+ =>), or  removed  (=> -).   Note
          that  the  diff-file  format used by genhtml reports changes in lines as removal of old
          line and addition of new line.

       Below are the resulting 12 categories, sorted by priority (assuming that untested code  is
       more interesting than tested code, and new code is more interesting than old code):

       UNC
              Uncovered New Code (+ => 0): newly added code is not tested.

       LBC
              Lost Baseline Coverage (1 => 0): unchanged code is no longer tested.

       UIC
              Uncovered Included Code (# => 0): previously unused code is untested.

       UBC
              Uncovered  Baseline  Code (0 => 0): unchanged code was untested before, is untested
              now.

       GBC
              Gained Baseline Coverage (0 => 1): unchanged code is tested now.

       GIC
              Gained Included Coverage (# => 1): previously unused code is tested now.

       GNC
              Gained New Coverage (+ => 1): newly added code is tested.

       CBC
              Covered Baseline Code (1 => 1): unchanged code  was  tested  before  and  is  still
              tested.

       EUB
              Excluded Uncovered Baseline (0 => #): previously untested code is unused now.

       ECB
              Excluded Covered Baseline (1 => #): previously tested code is unused now.

       DUB
              Deleted Uncovered Baseline (0 => -): previously untested code has been deleted.

              Note:  Because  these lines are not represented in the current source version, they
              are only represented in the classification summary table.

       DCB
              Deleted Covered Baseline (1 => -): previously tested code has been deleted.

              Note: Because these lines are not represented in the current source  version,  they
              are only represented in the classification summary table.

       The  differential  coverage  report  colorizes categorized regions in the source code view
       using unique colors for each.  You can use the --simplified-colors option to  instead  use
       one color for 'covered' code and another for 'uncovered'.

   Date and owner binning
       Date binning annotates coverage reports with age-of-last-change information to distinguish
       recently added or modified code which has not been tested from older, presumed stable code
       which  is  also  not  tested.   Owner  binning  adds  annotation identifying the author of
       changes.

       Both age and ownership reporting can be used to enhance  team  efforts  to  maintain  good
       coverage discipline by spotlighting coverage shortfalls in recently modified code, even in
       the absence of baseline coverage data.

       To enable date and owner binning, the --annotate-script option must be used to  specify  a
       script that provides source code line age and ownership information.

       For  each source line, age is the interval since the most recent modification date and the
       owner is the user identity responsible for the most recent change to that line.

       Line coverage overall totals and counts for each of the 12 classification  categories  are
       collected for each of the specified age ranges (see the --date-bins option, below).

   Script conventions
       Some  genhtml  options  expect  the  name of an external script or tool as argument. These
       scripts are then run as part of the  associated  function.  This  includes  the  following
       options:

              --annotate-script
              --criteria-script
              --version-script

       While  each  script  performs a separate function there are some common aspects in the way
       these options are handled:

       1. If an option is specified only once, the argument specifies the full command line  that
          genhtml passes to a shell interpreter to run the script.  This includes the script path
          followed by optional additional parameters separated by spaces. Care must be  taken  to
          provide proper quoting if script path or any parameter contains spaces or shell special
          characters.

       2. If an option is specified multiple times, the first  invocation  specifies  the  script
          path  and  any  further  invocation  specifies one additional parameter.  In this case,
          genhtml takes care of quoting of spaces contained in  script  location  and  additional
          parameters.

       3. genhtml  passes  any  additional  parameters specified via option arguments between the
          script path and the parameters required by the script's function.

       Example:

              genhtml --annotate-script /bin/script.sh
                      --annotate-script "full"

       results in genhtml executing the following command line:

              /bin/script.sh "full" source_file_name

       Note that multiple instances of each script may execute simultaneously if  the  --parallel
       option was specified. Therefore each script must either be reentrant or should arrange for
       its own synchronization, if necessary.

   Additional considerations
       If the --criteria-script option is  used,  genhtml  will  use  the  referenced  script  to
       determine whether your coverage criteria have been met - and will return a non-zero status
       and print a message if the criteria are not met.

       The --version-script option is  used  to  verify  that  the  same/compatible  source  code
       versions are displayed as were used to capture coverage data.

       HTML   output   files   are   created   in   the  current  working  directory  unless  the
       --output-directory option is used. If tracefile or baseline-file ends with  ".gz",  it  is
       assumed  to  be  GZIP-compressed  and  the  gunzip  tool  will  be  used  to decompress it
       transparently.

       Note that all source code files have to be present and readable at the exact  file  system
       location  they were compiled, and all path references in the input data ".info" and "diff"
       files must match exactly (i.e., exact string match).

       Further, the --version-script, --annotate-script, and --criteria-script  scripts  use  the
       same  path  strings.  However,  see  the  --substitute  option  for  a mechanism to adjust
       extracted paths so they match your source and/or revision control layout.

       Use option --diff-file to supply a unified diff file that represents the  changes  to  the
       source  code  files  between  the  version  used to compile and capture the baseline trace
       files, and the version used to compile and capture the current trace files.

       Use option --css-file to modify layout and colors of the generated HTML output. Files  are
       marked in different colors depending on the associated coverage rate.

       By default, the coverage limits for low, medium and high coverage are set to 0-75%, 75-90%
       and 90-100% percent respectively. To change these values, use configuration file options.

              genhtml_hi_limit and genhtml_med_limit

       or type-specific limits:

              genhtml_line_hi_limit and genhtml_line_med_limit
              genhtml_branch_hi_limit and genhtml_branch_med_limit
              genhtml_function_hi_limit and genhtml_function_med_limit

       See the lcovrc man page for details.

       Also note that when displaying percentages, 0% and 100% are only printed when  the  values
       are  exactly  0% and 100% respectively. Other values which would conventionally be rounded
       to 0% or 100% are instead printed as nearest  non-boundary  value.  This  behavior  is  in
       accordance with that of the gcov(1) tool.

OPTIONS

       -h
       --help
              Print a short help text, then exit.

       --version
              Print version number, then exit.

       -v
       --verbose
              Increment  informational  message verbosity.  This is mainly used for script and/or
              flow debugging - e.g., to figure out which data files are found, where.   Also  see
              the --quiet flag.

       -q
       --quiet
              Decrement informational message verbosity.

              Decreased verbosity will suppress 'progress' messages for example - while error and
              warning messages will continue to be printed.

       --debug
              Increment 'debug messages' verbosity.  This is useful primarily to  developers  who
              want to enhance the lcov tool suite.

       --flat
       --hierarchical
              Use the specified HTML report hierarchy layout.

              The default HTML report is 3 levels:

                     1. top-level: table of all directories,

                     2. directory: table of source files in a directory, and

                     3. source file detail: annotated source code.

              Option  --hierarchical  produces  a  multilevel  report which follows the directory
              structure of the source code (similar to the file tool in Microsoft Windows).

              Option --flat produces a two-level HTML report:

                     1. top-level: table of all project source files, and

                     2. source file detail: annotated source code.

              Only one of options --flat and --hierarchical can be specified at the same time.

              These options can also be persistently set via the lcovrc configuration file  using
              either:

                     genhtml_hierarchical = 1

              or

                     genhtml_flat_view = 1

              See the lcovrc man page for details.

       -f
       --frames
              Use HTML frames for source code view.

              If  enabled, a frameset is created for each source code file, providing an overview
              of the source code as a "clickable" image. Note that this  option  will  slow  down
              output  creation  noticeably because each source code character has to be inspected
              once. Note also that the GD.pm Perl module has to be installed for this  option  to
              work (it may be obtained from http://www.cpan.org).

       -s
       --show-details
              Generate detailed directory view.

              When  this option is enabled, genhtml generates two versions of each file view. One
              containing the standard information plus a link to a "detailed" version. The latter
              additionally  contains  information about which test case covered how many lines of
              each source file.

       -b baseline-file
       --baseline-file baseline-file
              Use data in baseline-file as coverage baseline.

              The coverage data file specified by baseline-file is read and used as the  baseline
              for  classifying  the  change  in  coverage  represented  by the coverage counts in
              tracefile.

              In general, you should specify a diff file in unified diff format  via  --diff-file
              when  you specify a --baseline-file.  Without a diff file, genhtml will assume that
              there are no source differences between 'baseline' and  'current'.   (For  example:
              this  might  be  used  to  find  incremental changes caused by the addition of more
              testcases, or to compare coverage results between gcc versions, or between gcc  and
              llvm.)

       --baseline-title title
              Use title as the descriptive label text for the source of coverage baseline data.

       --baseline-date date
              Use  date as the collection date in text format for the coverage baseline data.  If
              this argument is not specified, the default is to use  the  creation  time  of  the
              baseline-file as the baseline date.

       --current-date date
              Use  date as the collection date in text format for the coverage baseline data.  If
              this argument is not specified, the default is to use  the  creation  time  of  the
              current tracefile.

       --diff-file diff-file
              Use  the  diff-file  as  the  definition for source file changes between the sample
              points for baseline-file and tracefile(s).

              A suitable diff-file can be generated using the command:

                     git diff --relative <SHA_base> <SHA_current>

              or using the "p4udiff" or "gitdiff" sample scripts that are  provided  as  part  of
              this package in the following locations:

                     /usr/share/lcov/support-scripts/p4udiff

              and

                     /usr/share/lcov/support-scripts/gitdiff

              p4udiff  accepts  either a changelist ID or the literal string "sandbox"; "sandbox"
              indicates that there are modified files which have not been checked in.

              These scripts post-process the 'p4' or 'git' output to  (optionally)  remove  files
              that  are  not of interest and to explicitly note files which have not changed.  It
              is useful to note unchanged files denoted by lines of the form:

                     diff [optional header strings]
                     === file_path

              in the p4diff/gitdiff output as this knowledge will help to suppress spurious 'path
              mismatch' warnings.  See the --elide-path-mismatch option, below.

              Note  that you must specify --baseline-file when you specify --diff-file.  Both are
              needed for differential coverage categorization.

              Conversely, if you specify a --baseline-file without a  --diff-file,  then  genhtml
              will  assume  that  there  are  no  source  code changes:  source text is identical
              between 'baseline' and 'current'.

       --annotate-script script
              Use script to get source code annotation data.

              Use this option to specify an external tool or command line that genhtml can use to
              obtain  source  code  annotation data such as age and author of the last change for
              each source code line.

              This option also instructs genhtml to add a summary table to the HTML report header
              that  shows  counts  in  the various coverage categories, associated with each date
              bin. In addition, each source code line will show age and owner information.

              The specified script is expected to obtain age and ownership information  for  each
              source code line from the revision management system and to output this information
              in the format described below.

              If the annotate script fails and annotation errors are ignored via --ignore-errors,
              then genhtml will try to load the source file normally.  If the file is not present
              or not readable, and the --synthesize-missing flag is specified, then genhtml  will
              synthesize fake data for the file.

              Sample  annotation  scripts  for  Perforce  ("p4annotate") and git ("gitblame") are
              provided as part of this package in the following locations:

                     /usr/share/lcov/support-scripts/p4annotate

              and

                     /usr/share/lcov/support-scripts/gitblame

              Note that these scripts generate annotations from the file version  checked  in  to
              the repository - not the locally modified file in the build directory.  If you need
              annotations for locally modified files, you can shelve your changes in P4, or check
              them in to a local branch in git.

              Creating your own script

              When  creating  your  own  script, please first see Script considerations above for
              general calling conventions and script requirements.

              script is called by genhtml with the following command line:

                     script [additional_parameters]  source_file_name

              where

                     script
                            is the script executable

                     additional_parameters
                            includes any optional parameters specified  (see  Script  conventions
                            above)

                     source_file_name
                            is the source code file name

              The  script  executable  should  output a line to the standard output stream in the
              following format for each line in file source_file_name:

                     commit_id|author_id|date|source_code

              where

                     commit_id
                            is an ID identifying the last change to the line

                     author_id
                            identifies the author of the last change

                     date
                            is    the    data    of    last    change    in     W3CDTF     format
                            (<YYYY>-<MM>-<DD>T<hh>:<mm>:<ss><TZD>)

                     source_code
                            is the line's source code

              The  script  should return 0 (zero) if processing was successful and non-zero if it
              encountered an error.

       --criteria-script script
              Use script to test for coverage acceptance criteria.

              Use this option to specify an external tool or command line that genhtml can use to
              determine  if  coverage results meet custom acceptance criteria.  Criteria checking
              results are shown in the standard output log of genhtml.  If  at  least  one  check
              fails, genhtml will exit with a non-zero exit code after completing its processing.

              A  sample  coverage  criteria  script  is  provided  as part of this package in the
              following location:

                     /usr/share/lcov/support-scripts/criteria

              The sample script checks that top-level line coverage meets the criteria "UNC + LBC
              +  UIC  ==  0"  (added  code  and newly activated code must be tested, and existing
              tested code must not become untested).

              As another  example,  it  is  possible  to  create  scripts  that  mimic  the  lcov
              --fail-under-lines  feature  by checking that the ratio of exercised lines to total
              lines ("(GNC + GIC + CBC) / (GNC + GIC + CBC + UNC + UIC + UBC)") is  greater  than
              the  threshold  -  either  only  at  the top level, in every directory, or wherever
              desired. Similarly, criteria may include branch and function coverage metrics.

              By default the criteria script is called for  all  source  code  hierarchy  levels,
              i.e.:   top-level,   directory,   and   file-level.   The  criteria_callback_levels
              configuration file option can  be  used  to  limit  the  hierarchy  levels  to  any
              combination of 'top', 'directory', or 'file' levels.

              Example:

                     genhtml --rc criteria_callback_levels=directory,top ...

              You  can  increase  the  amount  of  data  passed  to  the  criteria  script  using
              configuration file option criteria_callback_data.  By default,  only  total  counts
              are  included.  Specifying "date" adds per date-bin counts, "owner" adds per owner-
              bin counts.

              Example:

                     genhtml --rc criteria_callback_data=date,owner ...

              See the lcovrc man page for more details.

              Creating your own script

              When creating your own script, please first see  Script  considerations  above  for
              general calling conventions and script requirements.

              script  is  run  with  the  following command line for each source code file, leaf-
              directory, and top-level coverage results:

                     script [additional_parameters]  name   type json_data

              where

                     script
                            is the script executable

                     additional_parameters
                            includes any optional parameters specified  (see  Script  conventions
                            above)

                     name
                            is  the  name  of  the  object  for which coverage criteria should be
                            checked, that is either the source code file name, directory name, or
                            "top" if the script is called for top-level data

                     type
                            is  the type of source code object for which coverage criteria should
                            be checked, that is one of "file", "directory", or "top"

                     json_data
                            is a JSON representation  of  coverage  data  for  the  corresponding
                            source code object

              The JSON data format is defined as follows:

              {
                "<type>": {
                  "found": <count>,
                  "hit": <count>,
                  "<category>": <count>,
                  ...
                },
                "<bin_type>": {
                  "<bin_id>" : {
                    "found": <count>,
                    "hit": <count>,
                    "<category>": <count>,
                    ...
                  },
                  ...
                },
                ...
              }

              where

                     type
                            specifies  the  type  of  coverage  as  one of "line", "function", or
                            "branch"

                     bin_type
                            specifies  the  type  of  per-bin  coverage  as  one  of  "line_age",
                            "function_age",  or "branch_age" for date-bin data, and "line_owners"
                            or "branch_owners" for owner-bin data

                     bin_id
                            specifies the date-bin index for date-bin  data,  and  owner  ID  for
                            owner-bin data.

                     found
                            defines the number of found lines, functions, or branches

                     hit
                            defines the number of hit lines, functions, or branches

                     category
                            defines  the number of lines, functions, or branches that fall in the
                            specified category (see Differential coverage above)

              Note that data is only reported for non-empty coverage types and bins.

              The script should return 0 (zero) if the criteria are met and non-zero otherwise.

              If desired, it may print a single line output string which will be appended to  the
              error  log  if  the  return  status is non-zero.  Additionally, non-empty lines are
              appended to the genhtml standard output log.

       --version-script script
              Use script to get source code file version data.

              Use this option to specify an external tool or command line that genhtml can use to
              obtain  a  source  code  file's  version ID when generating HTML or applying source
              filters (see --filter option).

              A version ID can be a file hash or commit ID from revision control. It is  used  to
              check  the version of the source file which is loaded against the version which was
              used to generate coverage data (i.e., the file version seen by lcov/geninfo). It is
              important  that  source  code  versions match - otherwise inconsistent or confusing
              results may be produced.

              Version mismatches typically happen when the tasks  of  capture,  aggregation,  and
              report generation are split between multiple jobs - e.g., when the same source code
              is used in multiple projects, a unified/global coverage report is required, and the
              projects accidentally use different revisions.

              Sample   scripts   for   Perforce   ("getp4version")   and   using   an   md5  hash
              ("get_signature") are provided as part of this package in the following locations:

                     /usr/share/lcov/support-scripts/getp4version

              and

                     /usr/share/lcov/support-scripts/get_signature

              Note that you must use the same script/same mechanism to determine the file version
              when  you  extract,  merge,  and  display  coverage  data  - otherwise, you may see
              spurious mismatch reports.

              Creating your own script

              When creating your own script, please first see  Script  considerations  above  for
              general calling conventions and script requirements.

              script  is  used both to generate and to compare the version ID to enable retaining
              history between calls or to do more complex processing  to  determine  equivalence.
              It will be called by genhtml with either of the following command lines:

              1. Determine source file version ID

                     script source_file_name

              It  should  write the version ID of  source_file_name to stdout and return a 0 exit
              status.  If the file is not versioned, it should write an empty string and return a
              0 exit status.

              2. Compare source file version IDs

                     script --compare  source_file_name source_file_id
                                       info_file_id

              where

                     source_file_name
                            is the source code file name

                     source_file_id
                            is the version ID returned by calling "script source_file_name"

                     info_file_id
                            is the version ID found in the corresponding .info file

              It should return non-zero if the IDs do not match.

       --checksum
              Specify  whether to compare stored tracefile checksum to checksum computed from the
              source code.

              Checksum verification is disabled by default.

              When checksum verification is enabled, a checksum will be computed for each  source
              code line and compared to the checksum found in the 'current' tracefile.  This will
              help to prevent attempts to display source code which is not identical to the  code
              used to generate the coverage data.

              Note  that  this option is somewhat subsumed by the --version-script option - which
              does something similar, but at the 'whole file' level.

       --new-file-as-baseline
              By default, when code is identified on source lines in  the  'current'  data  which
              were  not  identified  as  code in the 'baseline' data, but the source text has not
              changed, their coverpoints are categorized as "included code": GIC or UIC.

              However, if the configuration of the coverage job  has  been  recently  changed  to
              instrument  additional files, then all un-exercised coverpoints in those files will
              fall into the GIC category - which may cause certain coverage  criteria  checks  to
              fail.

              When this option is specified, genhtml pretends that the baseline data for the file
              is the same as the current data - so coverpoints are  categorized  as  CBC  or  UBC
              which do not trigger the coverage criteria check.

              Please note that coverpoints in the file are re-categorized only if:

                     •  There is no 'baseline' data for any coverpoint in this file, AND

                     •  The  file  pre-dates  the baseline:  the oldest line in the file is older
                        than  the  'baseline'  data  file  (or  the  value   specified   by   the
                        --baseline-date option).

       --elide-path-mismatch
              Differential  categorization uses file pathnames to match coverage entries from the
              ".info" file with file difference entries in the unified-diff-file.  If the entries
              are not identical, then categorization may be incorrect or strange.

              When  paths  do  not  match, genhtml will produce "path" error messages to tell you
              about the mismatches.

              If mismatches occur, the best solution is to fix the incorrect entries in the .info
              and/or  unified-diff-file  files.   However,  fixing these entries is not possible,
              then you can use this option to attempt to automatically work around them.

              When this option is specified, genhtml  will  pretend  that  the  unified-diff-file
              entry matches the .info file entries if:

                     •  the  same path is found in both the 'baseline' and 'current' .info files,
                        and

                     •  the basename of  the  path  in  the  .info  file  and  the  path  in  the
                        unified-diff-file are the same, and

                     •  there is only one unmatched unified-diff-file entry with that basename.

              See  the  --diff-file  discussion  above  for a discussion of how to avoid spurious
              warnings and/or incorrect matches.

       --synthesize-missing
              Generate (fake) file content if source file does not exist.   This  option  can  be
              used to work around otherwise fatal annotation errors.

       --date-bins day[,day,...]
              The   --date-bins  option  is  used  to  specify  age  boundaries  (cutpoints)  for
              date-binning classification.  If not specified, the default is to use 4 age ranges:
              less  than  7  days,  7  to  30 days, 30 to 180 days, and more than 180 days.  This
              argument has no effect if there is no source-annotation-script .

       --show-owners [all]
              If the --show-owners option is used, each coverage report header report  contain  a
              summary  table,  showing counts in the various coverage categories for everyone who
              appears in the revision control  annotation  as  the  most  recent  editor  of  the
              corresponding  line.   If  the  optional argument 'all' is not specified, the table
              will show only users who are responsible  for  un-exercised  code  lines.   If  the
              optional  argument  is  specified,  then  users responsible for any code lines will
              appear.  In both  cases,  users  who  are  responsible  for  non-code  lines  (e.g,
              comments)  are  not  shown.   This  option does nothing if --annotate-script is not
              used; it needs revision control information provided by calling the script.

              Please note: if the all option is not specified, the  summary  table  will  contain
              "Total"  rows  for  all  date/owner bins which are not empty - but there will be no
              secondary "File/Directory" entries for elements which have no "missed" coverpoints.

       --show-noncode
              By default, the source code detail view does not show owner or date annotations  in
              the  far-left  column  for  non-code  lines (e.g., comments). If the --show-noncode
              option is used, then the source code view will show annotations for both  code  and
              non-code    lines.     This    argument    has   no   effect   if   there   is   no
              source-annotation-script .

       --show-zero-columns
              By default, columns whose entries are all zero  are  removed  (not  shown)  in  the
              summary  table  at the top of each HTML page.  If the --show-zero-columns option is
              used, then those columns will be shown.

              When columns are retained, then all the tables have the same width/contain the same
              number of columns - which may be a benefit in some situations.

              When  columns  are  removed,  then  the tables are more compact and easier to read.
              This is especially true in relatively mature development environments,  when  there
              are very few un-exercised coverpoints in the project.

       --show-navigation
              By  default,  the  summary  table  in  the source code detail view does not contain
              hyperlinks from the number to the first line in the corresponding  category  ('Hit'
              or  'Missed')  and  from  the  current location to the next location in the current
              category, in non-differential coverage reports.  (This is the  lcov  'legacy'  view
              non-differential reports.)

              If the --show-navigation option is used, then the source code summary table will be
              generated with navigation links.  Hyperlinks are always generated for  differential
              coverage reports.

              This feature enables developers to find and understand coverage issues more quickly
              than they might otherwise, if they had to rely on scrolling.

       --show-proportions
              In the 'function coverage detail' table, also show  the  percentage  of  lines  and
              branches within the function which are exercised.

              This  feature  enables  developers  to  focus attention on functions which have the
              largest effect on overall code coverage.

              This feature is disabled by default.  Note that this option requires that you use a
              gcc version which is new enough to support function begin/end line reports.

       --simplified-colors
              By  default,  each  differential  category is colorized uniquely in the source code
              detail view.  With this option, only two colors are used:  one for covered code and
              another  for  uncovered  code.   Note  that ECB and EUB code is neither covered nor
              uncovered - and so may be difficult to distinguish in the source code view, as they
              will be presented in normal background color.

       --exclude pattern
              pattern  is  a  glob-match  pattern of filenames to exclude from the report.  Files
              which do NOT match will be included.  See the lcov man page for details.

       --include pattern
              pattern is a glob-match pattern of filenames to include in processing.  Files which
              do not match will be excluded from the report.  See the lcov man page for details.

       --erase-functions regexp
              Exclude  coverage  data  from lines which fall within a function whose name matches
              the supplied regexp.  Note that this is a mangled or demangled name,  depending  on
              whether the --demangle-cpp option is used or not.

              Note  that  this  option requires that you use a gcc version which is new enough to
              support function begin/end line reports.

       --substitute regexp_pattern
              Apply Perl regexp regexp_pattern to source  file  names  found  during  processing.
              This  is  useful  when some file paths in the baseline or current .info file do not
              match your source layout and so the source code is not found.   See  the  lcov  man
              page for more details.

       --omit-lines regexp_pattern
              Exclude coverage data from lines whose content matches regexp.

              Use  this  switch  if  you  want  to exclude line and branch coverage data for some
              particular constructs in your code (e.g., some complicated macro).   See  the  lcov
              man page for details.

       --parallel [ integer ]
       -j [ integer ]
              Specify  parallelism  to  use  during  processing  (maximum  number of forked child
              processes).  If the optional integer parallelism parameter is zero or  is  missing,
              then  use  to  use  up the number of cores on the machine.  Default is not to use a
              single process (no parallelism).

       --memory integer
              Specify the maximum amount of memory to use  during  parallel  processing,  in  Mb.
              Effectively,  the process will not fork() if this limit would be exceeded.  Default
              is 0 (zero) - which means that there is no limit.

              This option may be useful if the compute farm environment imposes strict limits  on
              resource  utilization  such that the job will be killed if it tries to use too many
              parallel children - but the user does  not  know  a  priori  what  the  permissible
              maximum  is.   This  option enables the tool to use maximum parallelism - up to the
              limit imposed by the memory restriction.

       --filter filters
              Specify a list of coverpoint filters to apply to input data.

              filters can be a comma-separated list of the following keywords:

              branch: ignore branch counts for C/C++ source code lines which  do  not  appear  to
              contain  conditionals.  These may be generated automatically by the compiler (e.g.,
              from C++ exception handling) - and are not interesting to users.  This  option  has
              no effect unless --branch-coverage is used.

              See  also  the  lcovrc  man  page  - which describes several variables which affect
              branch filtering: filter_lookahead and filter_bitwise_conditional.

              The most common use for branch filtering is to remove  compiler-generated  branches
              related  to  C++  exception  handlers.   See the no_exception_branch' option in the
              lcovrc man page for a way to remove all identified exception branches.

              brace: ignore line coverage counts on the closing brace of C/C++ code block, if the
              line  contains only a closing brace and the preceding line has the same count or if
              the close brace has a zero count and either  the  preceding  line  has  a  non-zero
              count, or the close brace is not the body of a conditional.

              These  lines  seem  to appear and disappear in gcov output - and cause differential
              coverage to report bogus LBC and/or GIC and/or UIC counts.  Bogus LBC or UIC counts
              are a problem because an automated regression which uses pass criteria "LBC + UIC +
              UNC == 0" will fail.

              blank: ignore lines which contain only whitespace (or whitespace + comments)  whose
              'hit'  count  is  zero.   These appear to be a 'gcov' artifact related to compiler-
              generated code - such as exception handlers and destructor  calls  at  the  end  of
              scope - and can confuse differential coverage criteria.

              range:  Ignore  line  and  branch coverpoints on lines which are out-of range/whose
              line number is beyond the end  of  the  source  file.   These  appear  to  be  gcov
              artifacts caused by a macro instantiation on the last line of the file.

              line: alias for "--filter brace,blank".

              region: apply LCOV_EXCL_START/LCOV_EXCL_STOP directives found in source text to the
              coverpoints found in the current and baseline .info  files.   This  option  may  be
              useful  in cases that the source code was not found during 'lcov --capture ...' but
              is accessible now.

              branch_region:  apply  LCOV_EXCL_BR_START/LCOV_EXCL_BR_STOP  directives  found   in
              source text to the coverpoints found in the current and baseline .info files.  This
              is similar to the 'region option, above - but applies to branch coverpoints only.

              function: combine data for every "unique" function which is  defined  at  the  same
              file/line.   geninfo/gcov seem to have a bug such that they create multiple entries
              for the same function.  This feature also merges all instances of the same template
              function/template method.

              trivial:  remove trivial functions and associated coverpoints.  'Trivial' functions
              are whose body is empty/do not contain any  statements.   Commonly,  these  include
              compiler-generated methods (e.g., default constructors and assignment operators) as
              well as static initialization wrappers, etc.

              Note that this filter requires function end line information - and so requires that
              you use a gcc veraion which is new enough to support begin/end line reports:  gcc/9
              or newer, or that you enable lcov/genhtml/geninfo to derive the information:

              In the lcovrc man page, see the derive_function_end_line setting  as  well  as  the
              trivial_function_threshold   setting.    The  former  is  used  to  turn  end  line
              calculation on or off, and the latter to change the  lookahead  used  to  determine
              whether the function body is empty.

       -o output-directory
       --output-directory output-directory
              Create files in output-directory.

              Use  this  option to tell genhtml to write the resulting files to a directory other
              than the current one. If output-directory does not exist, it will be created.

              It is advisable to use this option since depending on the project size,  a  lot  of
              files and subdirectories may be created.

       -t title
       --title title
              Display title in header table of all pages.

              title  is  written  to  the  "Test:"-field  in  the header table at the top of each
              generated HTML page to identify the  context  in  which  a  particular  output  was
              created. By default, this is the name of the 'current; tracefile.

              A  common use is to specify a test run name, or a version control system identifier
              (perforce changelist or git SHA, for example) that indicates the  code  level  that
              was tested.

       --header-title BANNER
              Display BANNER in header of all pages.

              BANNER  is  written to the header portion of each generated HTML page.  By default,
              this simply identifies this as an LCOV (differential) coverage report.

              A common use is to specify the name of  the  project  or  project  branch  and  the
              Jenkins build ID.

       --footer FOOTER
              Display FOOTER in footer of all pages.

              FOOTER  is  written to the footer portion of each generated HTML page.  The default
              simply identifies the LCOV tool version used to generate the report.

       -d description-file
       --description-file description-file
              Read test case descriptions from description-file.

              All test case descriptions found in description-file and referenced  in  the  input
              data file are read and written to an extra page which is then incorporated into the
              HTML output.

              The file format of description-file is:

              for each test case:
                     TN:<testname>
                     TD:<test description>

              Valid test case names can consist of letters, numbers and the underscore  character
              ('_').

       -k
       --keep-descriptions
              Do not remove unused test descriptions.

              Keep descriptions found in the description file even if the coverage data indicates
              that the associated test case did not cover any lines of code.

              This option can also be configured permanently using the configuration file  option
              genhtml_keep_descriptions.

       -c css-file
       --css-file css-file
              Use external style sheet file css-file.

              Using  this  option,  an  extra  .css  file may be specified which will replace the
              default one. This may be helpful if the default colors make your eyes want to  jump
              out of their sockets :)

              This  option can also be configured permanently using the configuration file option
              genhtml_css_file.

       --source-directory dirname
              Add 'dirname' to the list of places to look for source files.

              For relative paths listed in tracefile, genhtml will first look for the  path  from
              'cwd'  (where  genhtml  was invoked) and then from each alternate directory name in
              the order specified.  The first location matching location is used.

              This option can be specified multiple times, to add more directories to the  source
              search path.

       -p prefix
       --prefix prefix
              Remove prefix from all directory names.

              Because lists containing long filenames are difficult to read, there is a mechanism
              implemented that will automatically try to  shorten  all  directory  names  on  the
              overview  page  beginning  with  a common prefix. By default, this is done using an
              algorithm that tries to find the prefix which,  when  applied,  will  minimize  the
              resulting sum of characters of all directory names.

              Use this option to specify the prefix to be removed by yourself.

       --no-prefix
              Do not remove prefix from directory names.

              This  switch will completely disable the prefix mechanism described in the previous
              section.

              This option can also be configured permanently using the configuration file  option
              genhtml_no_prefix.

       --no-source
              Do not create source code view.

              Use this switch if you don't want to get a source code view for each file.

              This  option can also be configured permanently using the configuration file option
              genhtml_no_source.

       --num-spaces spaces
              Replace tabs in source view with num spaces.

              Default value is 8.

              This option can also be configured permanently using the configuration file  option
              genhtml_num_spaces.

       --highlight
              Highlight lines with converted-only coverage data.

              Use  this  option  in conjunction with the --diff option of lcov to highlight those
              lines which were only covered in data  sets  which  were  converted  from  previous
              source code versions.

              This  option can also be configured permanently using the configuration file option
              genhtml_highlight.

       --legend
              Include color legend in HTML output.

              Use this option to include a legend explaining the meaning of color coding  in  the
              resulting HTML output.

              This  option can also be configured permanently using the configuration file option
              genhtml_legend.

       --html-prolog prolog-file
              Read customized HTML prolog from prolog-file.

              Use this option to replace the default HTML prolog (the initial part  of  the  HTML
              source  code  leading  up  to  and  including  the <body> tag) with the contents of
              prolog-file.  Within the prolog text, the following words will be replaced  when  a
              page is generated:

              @pagetitle@
              The title of the page.

              @basedir@
              A relative path leading to the base directory (e.g., for locating css-files).

              This  option can also be configured permanently using the configuration file option
              genhtml_html_prolog.

       --html-epilog epilog-file
              Read customized HTML epilog from epilog-file.

              Use this option to replace the default HTML epilog (the  final  part  of  the  HTML
              source including </body>) with the contents of epilog-file.

              Within  the  epilog  text,  the  following  words  will  be replaced when a page is
              generated:

              @basedir@
              A relative path leading to the base directory (e.g., for locating css-files).

              This option can also be configured permanently using the configuration file  option
              genhtml_html_epilog.

       --html-extension extension
              Use customized filename extension for generated HTML pages.

              This  option  is  useful  in  situations  where  different  filename extensions are
              required to render the resulting pages correctly (e.g., php). Note that a '.'  will
              be inserted between the filename and the extension specified by this option.

              This  option can also be configured permanently using the configuration file option
              genhtml_html_extension.

       --html-gzip
              Compress all generated html files with gzip and add  a  .htaccess  file  specifying
              gzip-encoding in the root output directory.

              Use  this  option if you want to save space on your webserver. Requires a webserver
              with .htaccess support and a browser with support for gzip compressed html.

              This option can also be configured permanently using the configuration file  option
              genhtml_html_gzip.

       --sort
       --no-sort
              Specify whether to include sorted views of file and directory overviews.

              Use  --sort to include sorted views or --no-sort to not include them.  Sorted views
              are enabled by default.

              When sorted views are enabled, each overview page will contain links  to  views  of
              that page sorted by coverage rate.

              This  option can also be configured permanently using the configuration file option
              genhtml_sort.

       --function-coverage
       --no-function-coverage
              Specify whether to display function coverage summaries in HTML output.

              Use   --function-coverage   to    enable    function    coverage    summaries    or
              --no-function-coverage  to  disable  it. Function coverage summaries are enabled by
              default.

              This option can also be configured permanently using the configuration file  option
              genhtml_function_coverage.

              When  function  coverage summaries are enabled, each overview page will contain the
              number of functions found  and  hit  per  file  or  directory,  together  with  the
              resulting  coverage rate. In addition, each source code view will contain a link to
              a page which lists all functions found in that file plus the respective call  count
              for those functions.  The function coverage page groups the data for every alias of
              each function, sorted by name or execution count.  The representative name  of  the
              group of functions is the shorted (i.e., containing the fewest characters).

              If  using  differential coverage and a sufficiently recent gcc version which report
              both begin and end line of functions (gcc/9 and newer),  functions  are  considered
              'new'  if  any  of  their  source  lines  have  changed.   With older gcc versions,
              functions are considered 'new' if the function signature  has  changed  or  if  the
              entire function is new.

       --branch-coverage
       --no-branch-coverage
              Specify whether to display branch coverage data in HTML output.

              Use  --branch-coverage to enable branch coverage display or --no-branch-coverage to
              disable it. Branch coverage data display is disabled by default.

              When branch coverage display is enabled, each overview page will contain the number
              of  branches  found  and  hit  per  file  or directory, together with the resulting
              coverage rate. In addition, each source code view  will  contain  an  extra  column
              which lists all branches of a line with indications of whether the branch was taken
              or not. Branches are shown in the following format:

               ' + ': Branch was taken at least once
               ' - ': Branch was not taken
               ' # ': The basic block containing the branch was never executed

              Note that it might not always be possible to relate branches to  the  corresponding
              source  code  statements:  during compilation, GCC might shuffle branches around or
              eliminate some of them to generate better code.

              This option can also be configured permanently using the configuration file  option
              genhtml_branch_coverage.

       --demangle-cpp [param]
              Specify whether to demangle C++ function names.

              Use  this  option  if  you  want  to  convert  C++ internal function names to human
              readable format for display on the HTML function overview page.

              If called with no parameters,  genhtml  will  use  c++filt  for  demangling.   This
              requires that the c++filt tool is installed (see c++filt(1)).

              If  param  is  specified, it is treated as th tool to call to demangle source code.
              The --demangle-cpp option can be used multiple times to specify the demangling tool
              and  a set of command line options that are passed to the tool - similar to how the
              gcc -Xlinker paramter works.  In that case, you callback will  be  executed  as:  |
              demangle_param0  demangle_param1  ...   Note  that the demangle tool is called as a
              pipe and is expected to read from stdin and write to stdout.

       --ignore-errors errors
              Specify a list of errors after which to continue processing.

              Use this option to specify a list of  error  classes  after  which  genhtml  should
              continue  processing  with  a warning message instead of aborting.  To suppress the
              warning message, specify the error class twice.

              errors can be a comma-separated list of the following keywords:

              annotate: --annotate-script returned non-zero exit status - likely a file  path  or
              related  error.   HTML  source  code display will not be correct and ownership/date
              information may be missing.

              branch: Branch ID (2nd field in the  .info  file  'BRDA'  entry)  does  not  follow
              expected integer sequence.

              callback: Annotate, version, or criteria script error.

              category:  Line  number  categorizations are incorrect in the .info file, so branch
              coverage line number turns out to not be an executable source line.

              count: An excessive number of messages of some class has been reported - subsequent
              messages  of  that  type  will  be  suppressed.  The limit can be controlled by the
              'max_message_count' variable. See the lcovrc man page.

              corrupt: Corrupt/unreadable coverage data file found.

              deprecated: You are using a deprecated option.  This option will be removed  in  an
              upcoming release - so you should change your scripts now.

              empty:  The  patch  file specified by the --diff-file argument does not contain any
              differences.  This may  be  OK  if  there  were  no  source  code  changes  between
              'baseline'  and 'current' (e.g., the only change was to modify a Makefile) - or may
              indicate an unsupported file format.

              format: Unexpected syntax found in .info file.

              inconsistent: Files have been moved or repository history presented by  --diff-file
              data  is  not  consistent  with  coverage data; for example, an 'inserted' line has
              baseline coverage data.  These issues are  likely  to  be  caused  by  inconsistent
              handling in the 'diff' and 'annotate' scripts.

              mismatch: Inconsistent entries found in trace file:

              •  branch  expression (3rd field in the .info file 'BRDA' entry) of merge data does
                 not match, or

              •  function execution count (FNDA:...) but no function declaration (FN:...).

              negative: negative 'hit' count found.

              Note that negative counts may be caused by a known GCC bug - see

                     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68080

              and try compiling with "-fprofile-update=atomic". You will need to  recompile,  re-
              run your tests, and re-capture coverage data.

              package:  A  required perl package is not installed on your system.  In some cases,
              it is possible to ignore this message and continue - however, certain features will
              be disabled in that case.

              parallel: Various types of errors related to parallelism - e.g., child process died
              due to some error.   If you see an error related to parallel execution, it may be a
              good idea to remove the --parallel flag and try again.

              path: File name found in --diff-file file but does not appear in either baseline or
              current trace data.  These may be  mapping  issues  -  different  pathname  in  the
              tracefile vs. the diff file.

              source: The source code file for a data set could not be found.

              unmapped: Coverage data for a particular line cannot be found, possibly because the
              source code was not found, or because the line number mapping in the .info file  is
              wrong.

              This  can  happen if the source file used in HTML generation is not the same as the
              file used to generate the coverage data - for example, lines  have  been  added  or
              removed.

              unsupported:  The  requested  feature is not supported for this tool configuration.
              For example, function begin/end line range exclusions use some GCOV  features  that
              are not available in older GCC releases.

              unused:  The  include/exclude/erase/substitute/omit  pattern did not match any file
              pathnames.

              version: --version-script comparison returned  non-zero  mismatch  indication.   It
              likely  that  the version of the file which was used in coverage data extraction is
              different than the source  version  which  was  found.   File  annotations  may  be
              incorrect.

              Also  see  'man lcovrc' for a discussion of the 'max_message_count' parameter which
              can be used to control  the  number  of  warnings  which  are  emitted  before  all
              subsequent messages are suppressed.  This can be used to reduce log file volume.

       --keep-going
              Do not stop if error occurs: attempt to generate a result, however flawed.

              This  command  line option corresponds to the stop_on_error lcovrc option.  See the
              lcovrc man page for more details.

       --config-file config-file
              Specify a configuration file to use.  See the lcovrc man page for  details  of  the
              file format and options.

              When   this  option  is  specified,  neither  the  system-wide  configuration  file
              /etc/lcovrc, nor the per-user configuration file ~/.lcovrc is read.

              This option may be useful when there is a need to run several instances of  genhtml
              with different configuration file options in parallel.

              Note that this option must be specified in full - abbreviations are not supported.

       --rc keyword=value
              Override a configuration directive.

              Use   this  option  to  specify  a  keyword=value  statement  which  overrides  the
              corresponding configuration statement in the lcovrc  configuration  file.  You  can
              specify  this  option more than once to override multiple configuration statements.
              See lcovrc(5) for a list of available keywords and their meaning.

       --precision num
              Show coverage rates with num number of digits after the decimal point.

              Default value is 1.

              This option can also be configured permanently using the configuration file  option
              genhtml_precision.

       --suppress-aliases
              Suppress list of aliases in function detail table.

              Functions  whose  file/line  is the same are considered to be aliases; genthml uses
              the shortest name in the list of aliases (fewest characters) as the leader.

              The number of aliases can be large, for example due  to  instantiated  templates  -
              which  can  make  function coverage results difficult to read.  This option removes
              the list of aliases, making it easier to focus on  the  overall  function  coverage
              number, which is likely more interesting.

              Note that this option has an effect only when --filter function is applied.

              This  option can also be configured permanently using the configuration file option
              suppress_function_aliases.

       --forget-test-names
              If non-zero, ignore testcase names in .info file - i.e., treat all coverage data as
              if  it came from the same testcase.  This may improve performance and reduce memory
              consumption if user  does  not  need  per-testcase  coverage  summary  in  coverage
              reports.

              This  option can also be configured permanently using the configuration file option
              forget_testcase_names.

       --missed
              Show counts of missed lines, functions, or branches.

              Use this option to change overview pages to show the count of lines, functions,  or
              branches that were not hit. These counts are represented by negative numbers.

              When  specified  together  with  --sort, file and directory views will be sorted by
              missed counts.

              This option can also be configured permanently using the configuration file  option
              genhtml_missed.

       --dark-mode
              Use  a  light-display-on-dark-background  color  scheme  rather  than  the  default
              dark-display-on-light-background.

              The idea is to reduce eye strain due to viewing dark text  on  a  bright  screen  -
              particularly at night.

       --tempdir dirname
              Write temporary and intermediate data to indicated directory.  Default is "/tmp".

       --preserve
              Preserve intermediate data files generated by various steps in the tool - e.g., for
              debugging.  By default, these files are deleted.

       --save
              Copy unified-diff-file, baseline_trace_file, and tracefile(s) to output-directory.

              Keeping copies of the input  data  files  may  help  to  debug  any  issues  or  to
              regenerate report files later.

FILES

       /etc/lcovrc
              The system-wide configuration file.

       ~/.lcovrc
              The per-user configuration file.

       /usr/share/lcov/support-scripts/p4udiff
              Sample  script  for  use  with  --diff-file  that  creates  a unified diff file via
              Perforce.

       /usr/share/lcov/support-scripts/gitdiff
              Sample script for use with --diff-file that creates a unified diff file via git.

       /usr/share/lcov/support-scripts/p4annotate
              Sample script for use with --annotate-script  that  provides  annotation  data  via
              Perforce.

       /usr/share/lcov/support-scripts/gitblame
              Sample script for use with --annotate-script that provides annotation data via git.

       /usr/share/lcov/support-scripts/criteria
              Sample script for use with --criteria-script that implements a check for "UNC + LBC
              + UIC == 0".

       /usr/share/lcov/support-scripts/getp4version
              Sample script for use with --version-script that obtains version IDs via Perforce.

       /usr/share/lcov/support-scripts/get_signature
              Sample script for use with --version-script that uses md5hash as version IDs.

AUTHORS

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

       Henry Cox <henry.cox@mediatek.com>
              Differential coverage and date/owner binning, filtering, error management, parallel
              execution sections,

SEE ALSO

       lcov(1), lcovrc(5), geninfo(1), genpng(1), gendesc(1), gcov(1)

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