llvm-cov - emit coverage information
====================================

SYNOPSIS
--------

:program:`llvm-cov` *command* [*args...*]

DESCRIPTION
-----------

The :program:`llvm-cov` tool shows code coverage information for
programs that are instrumented to emit profile data. It can be used to
work with ``gcov``\-style coverage or with ``clang``\'s instrumentation
based profiling.

If the program is invoked with a base name of ``gcov``, it will behave as if
the :program:`llvm-cov gcov` command were called. Otherwise, a command should
be provided.

COMMANDS
--------

* :ref:`gcov <llvm-cov-gcov>`
* :ref:`show <llvm-cov-show>`
* :ref:`report <llvm-cov-report>`
* :ref:`export <llvm-cov-export>`

.. program:: llvm-cov gcov

.. _llvm-cov-gcov:

GCOV COMMAND
------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov gcov` [*options*] *SOURCEFILE*

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov gcov` tool reads code coverage data files and displays
the coverage information for a specified source file. It is compatible with the
``gcov`` tool from version 4.2 of ``GCC`` and may also be compatible with some
later versions of ``gcov``.

To use :program:`llvm-cov gcov`, you must first build an instrumented version
of your application that collects coverage data as it runs. Compile with the
``-fprofile-arcs`` and ``-ftest-coverage`` options to add the
instrumentation. (Alternatively, you can use the ``--coverage`` option, which
includes both of those other options.) You should compile with debugging
information (``-g``) and without optimization (``-O0``); otherwise, the
coverage data cannot be accurately mapped back to the source code.

At the time you compile the instrumented code, a ``.gcno`` data file will be
generated for each object file. These ``.gcno`` files contain half of the
coverage data. The other half of the data comes from ``.gcda`` files that are
generated when you run the instrumented program, with a separate ``.gcda``
file for each object file. Each time you run the program, the execution counts
are summed into any existing ``.gcda`` files, so be sure to remove any old
files if you do not want their contents to be included.

By default, the ``.gcda`` files are written into the same directory as the
object files, but you can override that by setting the ``GCOV_PREFIX`` and
``GCOV_PREFIX_STRIP`` environment variables. The ``GCOV_PREFIX_STRIP``
variable specifies a number of directory components to be removed from the
start of the absolute path to the object file directory. After stripping those
directories, the prefix from the ``GCOV_PREFIX`` variable is added. These
environment variables allow you to run the instrumented program on a machine
where the original object file directories are not accessible, but you will
then need to copy the ``.gcda`` files back to the object file directories
where :program:`llvm-cov gcov` expects to find them.

Once you have generated the coverage data files, run :program:`llvm-cov gcov`
for each main source file where you want to examine the coverage results. This
should be run from the same directory where you previously ran the
compiler. The results for the specified source file are written to a file named
by appending a ``.gcov`` suffix. A separate output file is also created for
each file included by the main source file, also with a ``.gcov`` suffix added.

The basic content of an ``.gcov`` output file is a copy of the source file with
an execution count and line number prepended to every line. The execution
count is shown as ``-`` if a line does not contain any executable code. If
a line contains code but that code was never executed, the count is displayed
as ``#####``.

OPTIONS
^^^^^^^

.. option:: -a, --all-blocks

 Display all basic blocks. If there are multiple blocks for a single line of
 source code, this option causes llvm-cov to show the count for each block
 instead of just one count for the entire line.

.. option:: -b, --branch-probabilities

 Display conditional branch probabilities and a summary of branch information.

.. option:: -c, --branch-counts

 Display branch counts instead of probabilities (requires -b).

.. option:: -f, --function-summaries

 Show a summary of coverage for each function instead of just one summary for
 an entire source file.

.. option:: --help

 Display available options (--help-hidden for more).

.. option:: -l, --long-file-names

 For coverage output of files included from the main source file, add the
 main file name followed by ``##`` as a prefix to the output file names. This
 can be combined with the --preserve-paths option to use complete paths for
 both the main file and the included file.

.. option:: -n, --no-output

 Do not output any ``.gcov`` files. Summary information is still
 displayed.

.. option:: -o=<DIR|FILE>, --object-directory=<DIR>, --object-file=<FILE>

 Find objects in DIR or based on FILE's path. If you specify a particular
 object file, the coverage data files are expected to have the same base name
 with ``.gcno`` and ``.gcda`` extensions. If you specify a directory, the
 files are expected in that directory with the same base name as the source
 file.

.. option:: -p, --preserve-paths

 Preserve path components when naming the coverage output files. In addition
 to the source file name, include the directories from the path to that
 file. The directories are separate by ``#`` characters, with ``.`` directories
 removed and ``..`` directories replaced by ``^`` characters. When used with
 the --long-file-names option, this applies to both the main file name and the
 included file name.

.. option:: -u, --unconditional-branches

 Include unconditional branches in the output for the --branch-probabilities
 option.

.. option:: -version

 Display the version of llvm-cov.

EXIT STATUS
^^^^^^^^^^^

:program:`llvm-cov gcov` returns 1 if it cannot read input files.  Otherwise,
it exits with zero.


.. program:: llvm-cov show

.. _llvm-cov-show:

SHOW COMMAND
------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov show` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov show` command shows line by line coverage of the
binaries *BIN*,...  using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCES*.

To use :program:`llvm-cov show`, you need a program that is compiled with
instrumentation to emit profile and coverage data. To build such a program with
``clang`` use the ``-fprofile-instr-generate`` and ``-fcoverage-mapping``
flags. If linking with the ``clang`` driver, pass ``-fprofile-instr-generate``
to the link stage to make sure the necessary runtime libraries are linked in.

The coverage information is stored in the built executable or library itself,
and this is what you should pass to :program:`llvm-cov show` as a *BIN*
argument. The profile data is generated by running this instrumented program
normally. When the program exits it will write out a raw profile file,
typically called ``default.profraw``, which can be converted to a format that
is suitable for the *PROFILE* argument using the :program:`llvm-profdata merge`
tool.

OPTIONS
^^^^^^^

.. option:: -show-line-counts

 Show the execution counts for each line. This is enabled by default, unless
 another ``-show`` option is used.

.. option:: -show-expansions

 Expand inclusions, such as preprocessor macros or textual inclusions, inline
 in the display of the source file.

.. option:: -show-instantiations

 For source regions that are instantiated multiple times, such as templates in
 ``C++``, show each instantiation separately as well as the combined summary.

.. option:: -show-regions

 Show the execution counts for each region by displaying a caret that points to
 the character where the region starts.

.. option:: -show-line-counts-or-regions

 Show the execution counts for each line if there is only one region on the
 line, but show the individual regions if there are multiple on the line.

.. option:: -use-color[=VALUE]

 Enable or disable color output. By default this is autodetected.

.. option:: -arch=<name>

 If the covered binary is a universal binary, select the architecture to use.
 It is an error to specify an architecture that is not included in the
 universal binary or to use an architecture that does not match a
 non-universal binary.

.. option:: -name=<NAME>

 Show code coverage only for functions with the given name.

.. option:: -name-regex=<PATTERN>

 Show code coverage only for functions that match the given regular expression.

.. option:: -format=<FORMAT>

 Use the specified output format. The supported formats are: "text", "html".

.. option:: -tab-size=<TABSIZE>

 Replace tabs with <TABSIZE> spaces when preparing reports. Currently, this is
 only supported for the html format.

.. option:: -output-dir=PATH

 Specify a directory to write coverage reports into. If the directory does not
 exist, it is created. When used in function view mode (i.e when -name or
 -name-regex are used to select specific functions), the report is written to
 PATH/functions.EXTENSION. When used in file view mode, a report for each file
 is written to PATH/REL_PATH_TO_FILE.EXTENSION.

.. option:: -Xdemangler=<TOOL>|<TOOL-OPTION>

 Specify a symbol demangler. This can be used to make reports more
 human-readable. This option can be specified multiple times to supply
 arguments to the demangler (e.g `-Xdemangler c++filt -Xdemangler -n` for C++).
 The demangler is expected to read a newline-separated list of symbols from
 stdin and write a newline-separated list of the same length to stdout.

.. option:: -line-coverage-gt=<N>

 Show code coverage only for functions with line coverage greater than the
 given threshold.

.. option:: -line-coverage-lt=<N>

 Show code coverage only for functions with line coverage less than the given
 threshold.

.. option:: -region-coverage-gt=<N>

 Show code coverage only for functions with region coverage greater than the
 given threshold.

.. option:: -region-coverage-lt=<N>

 Show code coverage only for functions with region coverage less than the given
 threshold.

.. program:: llvm-cov report

.. _llvm-cov-report:

REPORT COMMAND
--------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov report` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov report` command displays a summary of the coverage of
the binaries *BIN*,... using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCES*.

If no source files are provided, a summary line is printed for each file in the
coverage data. If any files are provided, summaries are shown for each function
in the listed files instead.

For information on compiling programs for coverage and generating profile data,
see :ref:`llvm-cov-show`.

OPTIONS
^^^^^^^

.. option:: -use-color[=VALUE]

 Enable or disable color output. By default this is autodetected.

.. option:: -arch=<name>

 If the covered binary is a universal binary, select the architecture to use.
 It is an error to specify an architecture that is not included in the
 universal binary or to use an architecture that does not match a
 non-universal binary.

.. option:: -show-functions

 Show coverage summaries for each function.

.. program:: llvm-cov export

.. _llvm-cov-export:

EXPORT COMMAND
--------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov export` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]]

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov export` command exports regions, functions, expansions,
and summaries of the coverage of the binaries *BIN*,... using the profile data
*PROFILE* as JSON.

For information on compiling programs for coverage and generating profile data,
see :ref:`llvm-cov-show`.

OPTIONS
^^^^^^^

.. option:: -arch=<name>

 If the covered binary is a universal binary, select the architecture to use.
 It is an error to specify an architecture that is not included in the
 universal binary or to use an architecture that does not match a
 non-universal binary.
