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:
parent
24ea113f75
commit
b2230210f1
2 changed files with 47 additions and 1 deletions
43
gcc/gcov.c
43
gcc/gcov.c
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue