Hi,

I recently rewrote `cg_annotate`, `cg_diff`, and `cg_merge` in Python. The
old versions were written in Perl, Perl, and C, respectively. The new
versions are much nicer and easier to modify, and I have various ideas for
improving `cg_annotate`. This email is about one of those ideas.

A typical way to invoke `cg_annotate` is like this:

> cg_annotate cachegrind.out.12345

This implies `--auto=yes`, which requests line-by-line "auto-annotation" of
source files. I.e. `cg_annotate` will automatically annotate all files in
the profile that meet the significance threshold.

It's also possible to do something like this:

> cg_annotate --auto=no cachegrind.out.12345 a.c b.c

Which instead requests "user annotation" of the files `a.c` and `b.c`.

My thesis is that auto-annotation suffices in practice for all reasonable
use cases, and that user annotation is unnecessary and can be removed.

When I first wrote `cg_annotate` in 2002, only user annotation was
implemented. Shortly after, I added the `--auto={yes,no}` option. Since
then I've never used user annotation, and I suspect nobody else has either.
User annotation is ok when dealing with tiny programs, but as soon as you
are profiling a program with more than a handful of source files it becomes
impractical.

The only possible use cases I can think of for user annotation are as
follows.

   - If you want to see a particular file(s) annotated but you don't want
   to see any others, then you can use user annotation in combination with
   `--auto=no`. But it's trivial to search through the output for the
   particular file, so this doesn't seem important.
   - If the path to a file is somehow really messed up in the debug info,
   it might be possible that auto-annotation would fail to find it, but user
   annotation could find it, possibly in combination with `-I`. But this seems
   unlikely. Some basic testing shows that gcc, clang and rustc all default to
   using full paths in debug info. gcc supports `-fdebug-prefix-map` but that
   seems to mostly be used for changing full paths to relative paths, which
   will still work fine.

Removing user annotation would (a) simplify the code and docs, and (b)
enable the possibility of moving the merge functionality from `cg_merge`
into `cg_annotate`, by allowing the user to specify multiple cachegrind.out
files as input.

So: is anybody using user annotation? Does anybody see any problems with
this proposal?

Thanks.

Nick
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to