Add --debug-info-full-path option and shorten source name
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 15 Apr 2016 17:37:38 +0000 (13:37 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 3 May 2016 19:42:41 +0000 (15:42 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
converter/babeltrace.c
formats/ctf-text/ctf-text.c
include/babeltrace/babeltrace-internal.h
include/babeltrace/debuginfo.h
include/babeltrace/trace-debuginfo.h
lib/debuginfo.c

index 2718a46176f9ad6c3340cd73fbd4bcbd53284851..f16e06c464a6c3f0a33acc05441013c1507a3bb2 100644 (file)
@@ -106,6 +106,7 @@ enum {
        OPT_CLOCK_FORCE_CORRELATE,
        OPT_STREAM_INTERSECTION,
        OPT_DEBUG_INFO_DIR,
+       OPT_DEBUG_INFO_FULL_PATH,
 };
 
 /*
@@ -138,6 +139,7 @@ static struct poptOption long_options[] = {
        { "stream-intersection", 0, POPT_ARG_NONE, NULL, OPT_STREAM_INTERSECTION, NULL, NULL },
 #ifdef ENABLE_DEBUGINFO
        { "debug-info-dir", 0, POPT_ARG_STRING, NULL, OPT_DEBUG_INFO_DIR, NULL, NULL },
+       { "debug-info-full-path", 0, POPT_ARG_NONE, NULL, OPT_DEBUG_INFO_FULL_PATH, NULL, NULL },
 #endif
        { NULL, 0, 0, NULL, 0, NULL, NULL },
 };
@@ -188,6 +190,7 @@ static void usage(FILE *fp)
 #ifdef ENABLE_DEBUGINFO
        fprintf(fp, "      --debug-info-dir           Directory in which to look for debugging information\n");
        fprintf(fp, "                                 files. (default: /usr/lib/debug/)\n");
+       fprintf(fp, "      --debug-info-full-path     Show full debug info source and binary paths (if available)\n");
 #endif
        list_formats(fp);
        fprintf(fp, "\n");
@@ -418,6 +421,9 @@ static int parse_options(int argc, char **argv)
                                goto end;
                        }
                        break;
+               case OPT_DEBUG_INFO_FULL_PATH:
+                       opt_debug_info_full_path = 1;
+                       break;
                default:
                        ret = -EINVAL;
                        goto end;
index 008762339fdef48d861aca994d5a1f6661fcae40..afdc07c1d80576c367743e0e49a25e98c5fe17aa 100644 (file)
@@ -60,7 +60,8 @@ int opt_all_field_names,
        opt_loglevel_field,
        opt_emf_field,
        opt_callsite_field,
-       opt_delta_field = 1;
+       opt_delta_field = 1,
+       opt_debug_info_full_path;
 
 enum field_item {
        ITEM_SCOPE,
index 9d252c8e6526fdb51bf1833a882099a55dc87da2..71c236a46d10187e8db6e348f94046a0e91cbc2c 100644 (file)
@@ -191,7 +191,8 @@ extern int opt_all_field_names,
        opt_clock_seconds,
        opt_clock_date,
        opt_clock_gmt,
-       opt_clock_force_correlate;
+       opt_clock_force_correlate,
+       opt_debug_info_full_path;
 
 extern uint64_t opt_clock_offset;
 extern uint64_t opt_clock_offset_ns;
index 9d5a9ddba719708fa76f80ad424b5e0d2828232a..9849685a04500a77a71704428f08b8839f05b7b1 100644 (file)
@@ -43,6 +43,8 @@ struct debug_info_source {
        char *func;
        uint64_t line_no;
        char *filename;
+       /* short_filename points inside filename, no need to free. */
+       const char *short_filename;
 };
 
 BT_HIDDEN
index adbad09d6c6533082aaafb0374f750706c464cee..963ec97fb45ff6789199422746fc283e60742fba 100644 (file)
@@ -62,9 +62,11 @@ void ctf_text_integer_write_debug_info(struct bt_stream_pos *ppos,
                                        fprintf(pos->fp, ", ");
                                }
 
-                               fprintf(pos->fp, "source_loc = \"%s:%" PRIu64
+                               fprintf(pos->fp, "src = \"%s:%" PRIu64
                                                "\"",
-                                               debug_info_src->filename,
+                                               opt_debug_info_full_path ?
+                                               debug_info_src->filename :
+                                               debug_info_src->short_filename,
                                                debug_info_src->line_no);
                        }
 
index 4284f8e15d1d47e0d47029d355895983f0bf4371..517e1bcac8dc25d55b8d31d9661e16c1cf11cfac 100644 (file)
@@ -4,6 +4,7 @@
  * Copyright (c) 2015 EfficiOS Inc. and Linux Foundation
  * Copyright (c) 2015 Philippe Proulx <pproulx@efficios.com>
  * Copyright (c) 2015 Antoine Busque <abusque@efficios.com>
+ * Copyright (c) 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -30,6 +31,7 @@
 #include <babeltrace/ctf-ir/metadata.h>
 #include <babeltrace/debuginfo.h>
 #include <babeltrace/so-info.h>
+#include <babeltrace/babeltrace-internal.h>
 
 struct proc_debug_info_sources {
        /*
@@ -86,6 +88,37 @@ void debug_info_source_destroy(struct debug_info_source *debug_info_src)
        g_free(debug_info_src);
 }
 
+/*
+ * Returns the location of a path's file (the last element of the path).
+ * Returns the original path on error.
+ */
+static
+const char *get_filename_from_path(const char *path)
+{
+       size_t i = strlen(path);
+
+       if (i == 0) {
+               goto end;
+       }
+
+       if (path[i - 1] == '/') {
+               /*
+                * Path ends with a trailing slash, no filename to return.
+                * Return the original path.
+                */
+               goto end;
+       }
+
+       while (i-- > 0) {
+               if (path[i] == '/') {
+                       path = &path[i + 1];
+                       goto end;
+               }
+       }
+end:
+       return path;
+}
+
 static
 struct debug_info_source *debug_info_source_create_from_so(struct so_info *so,
                uint64_t ip)
@@ -122,10 +155,18 @@ struct debug_info_source *debug_info_source_create_from_so(struct so_info *so,
 
                if (src_loc->filename) {
                        debug_info_src->filename = strdup(src_loc->filename);
-
                        if (!debug_info_src->filename) {
                                goto error;
                        }
+
+                       /*
+                        * The short version of the filename does not include
+                        * the full path, it will only point to the last element
+                        * of the path (anything after the last '/').
+                        */
+                       debug_info_src->short_filename = get_filename_from_path(
+                                       src_loc->filename);
+
                }
 
                source_location_destroy(src_loc);
This page took 0.045373 seconds and 4 git commands to generate.