# llvm-locstats - calculate statistics on DWARF debug location

:::{program} llvm-locstats
:::

## SYNOPSIS

{program}`llvm-locstats` \[*options*\] \[*filename*\]

## DESCRIPTION

{program}`llvm-locstats` works like a wrapper around {program}`llvm-dwarfdump`.
It parses {program}`llvm-dwarfdump` statistics regarding debug location by
pretty printing it in a more human-readable way.

The line 0% shows the number and the percentage of DIEs with no location
information, but the line 100% shows the information for DIEs where there is
location information in all code section bytes (where the variable or parameter
is in the scope). The line \[50%,60%) shows the number and the percentage of DIEs
where the location information is between 50 and 60 percentage of its scope
covered.

## OPTIONS

:::{option} --only-variables
calculate the location statistics only for local variables
:::

:::{option} --only-formal-parameters
calculate the location statistics only for formal parameters
:::

:::{option} --ignore-debug-entry-values
ignore the location statistics on locations containing the
debug entry values DWARF operation
:::

:::{option} --draw-plot
make histogram of location buckets generated (requires
matplotlib)
:::

:::{option} --compare
compare the debug location coverage on two files provided, and draw
a plot showing the difference (requires matplotlib)
:::

## EXIT STATUS

{program}`llvm-locstats` returns 0 if the input file were parsed
successfully. Otherwise, it returns 1.

## EXAMPLE 1

Pretty print the location coverage on the standard output.

```none
llvm-locstats a.out

  =================================================
            Debug Location Statistics
  =================================================
        cov%          samples       percentage(~)
  -------------------------------------------------
     0%                    1              16%
     (0%,10%)              0               0%
     [10%,20%)             0               0%
     [20%,30%)             0               0%
     [30%,40%)             0               0%
     [40%,50%)             0               0%
     [50%,60%)             1              16%
     [60%,70%)             0               0%
     [70%,80%)             0               0%
     [80%,90%)             1              16%
     [90%,100%)            0               0%
     100%                  3              50%
  =================================================
  -the number of debug variables processed: 6
  -PC ranges covered: 81%
  -------------------------------------------------
  -total availability: 83%
  =================================================
```

## EXAMPLE 2

Generate a plot as an image file.

```none
llvm-locstats --draw-plot file1.out
```

```{image} locstats-draw-plot.png
:align: center
```

## EXAMPLE 3

Generate a plot as an image file showing the difference in the debug location
coverage.

```none
llvm-locstats --compare file1.out file1.withentryvals.out
```

```{image} locstats-compare.png
:align: center
```

## SEE ALSO

{manpage}`llvm-dwarfdump(1)`

