diff options
author | Martin Liska <mliska@suse.cz> | 2021-01-12 11:27:34 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2021-01-12 12:55:17 +0100 |
commit | b2230210f1742ddf5e863172ff86531019d1039e (patch) | |
tree | bb2f984ae415d97a03105fd41e9ffa128fc95cbd /gcc/gcov.c | |
parent | 24ea113f75cfad38894dc1ad16b23c0538ef17d4 (diff) | |
download | gcc-b2230210f1742ddf5e863172ff86531019d1039e.zip gcc-b2230210f1742ddf5e863172ff86531019d1039e.tar.gz gcc-b2230210f1742ddf5e863172ff86531019d1039e.tar.bz2 |
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.
Diffstat (limited to 'gcc/gcov.c')
-rw-r--r-- | gcc/gcov.c | 43 |
1 files changed, 42 insertions, 1 deletions
@@ -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; |