gcov: add more debugging facility

gcc/ChangeLog:

	* gcov.c (source_info::debug): New.
	(print_usage): Add --debug (-D) option.
	(process_args): Likewise.
	(generate_results): Call src->debug after
	accumulate_line_counts.
	(read_graph_file): Properly assign id for EXIT_BLOCK.
	* profile.c (branch_prob): Dump function body before it is
	instrumented.
This commit is contained in:
Martin Liska 2021-01-12 11:27:34 +01:00
parent 24ea113f75
commit b2230210f1
2 changed files with 47 additions and 1 deletions

View file

@ -371,6 +371,9 @@ public:
/* Register a new function. */
void add_function (function_info *fn);
/* Debug the source file. */
void debug ();
/* Index of the source_info in sources vector. */
unsigned index;
@ -428,6 +431,31 @@ source_info::get_functions_at_location (unsigned line_num) const
return slot;
}
void source_info::debug ()
{
fprintf (stderr, "source_info: %s\n", name);
for (vector<function_info *>::iterator it = functions.begin ();
it != functions.end (); it++)
{
function_info *fn = *it;
fprintf (stderr, " function_info: %s\n", fn->get_name ());
for (vector<block_info>::iterator bit = fn->blocks.begin ();
bit != fn->blocks.end (); bit++)
{
fprintf (stderr, " block_info id=%d, count=%ld\n",
bit->id, bit->count);
}
}
for (unsigned lineno = 1; lineno < lines.size (); ++lineno)
{
line_info &line = lines[lineno];
fprintf (stderr, " line_info=%d, count=%ld\n", lineno, line.count);
}
fprintf (stderr, "\n");
}
class name_map
{
public:
@ -579,6 +607,10 @@ static int flag_human_readable_numbers = 0;
static int flag_function_summary = 0;
/* Print debugging dumps. */
static int flag_debug = 0;
/* Object directory file prefix. This is the directory/file where the
graph and data files are looked for, if nonzero. */
@ -896,6 +928,7 @@ print_usage (int error_p)
fnotice (file, " -c, --branch-counts Output counts of branches taken\n\
rather than percentages\n");
fnotice (file, " -d, --display-progress Display progress information\n");
fnotice (file, " -D, --debug Display debugging dumps\n");
fnotice (file, " -f, --function-summaries Output summaries for each function\n");
fnotice (file, " -h, --help Print this help, then exit\n");
fnotice (file, " -j, --json-format Output JSON intermediate format\n\
@ -963,6 +996,7 @@ static const struct option options[] =
{ "hash-filenames", no_argument, NULL, 'x' },
{ "use-colors", no_argument, NULL, 'k' },
{ "use-hotness-colors", no_argument, NULL, 'q' },
{ "debug", no_argument, NULL, 'D' },
{ 0, 0, 0, 0 }
};
@ -973,7 +1007,7 @@ process_args (int argc, char **argv)
{
int opt;
const char *opts = "abcdfhHijklmno:pqrs:tuvwx";
const char *opts = "abcdDfhHijklmno:pqrs:tuvwx";
while ((opt = getopt_long (argc, argv, opts, options, NULL)) != -1)
{
switch (opt)
@ -1044,6 +1078,9 @@ process_args (int argc, char **argv)
case 't':
flag_use_stdout = 1;
break;
case 'D':
flag_debug = 1;
break;
case 'v':
print_version ();
/* print_version will exit. */
@ -1466,6 +1503,8 @@ generate_results (const char *file_name)
}
accumulate_line_counts (src);
if (flag_debug)
src->debug ();
if (!flag_use_stdout)
file_summary (&src->coverage);
@ -1804,6 +1843,8 @@ read_graph_file (void)
arc = XCNEW (arc_info);
arc->dst = &fn->blocks[dest];
/* Set id in order to find EXIT_BLOCK. */
arc->dst->id = dest;
arc->src = src_blk;
arc->count = 0;

View file

@ -1294,6 +1294,11 @@ branch_prob (bool thunk)
if (dump_file)
fprintf (dump_file, "%d instrumentation edges\n", num_instrumented);
/* Dump function body before it's instrumented.
It helps to debug gcov tool. */
if (dump_file && (dump_flags & TDF_DETAILS))
dump_function_to_file (cfun->decl, dump_file, dump_flags);
/* Compute two different checksums. Note that we want to compute
the checksum in only once place, since it depends on the shape
of the control flow which can change during