This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
I've read your review and i've corrected formatting on my patch. It's seems correct now. I've also corrected ChangeLog but it was tricky for myself (write correct and clear english and think about what is necessary details that i have to write in ChangeLog). I've wrote documentation for this feature. All of these you can find in attachment. I've run general testsuites in original unpatched gdb-7.2 and save stdout and stderr to separate files. After i've run exactly same tests (make check) in patched gdb-7.2 and save to another separate files. diff between these files shows me that my patch don't bring side effects. Of course i understand that general testsuites can check only for rough mistakes. So i should learn DejaGNU to test my patch. I think on how i can test possible side effects from my patch. I can send 'make check' results if you want. So my patch, doc patch and ChangeLog needs a new review in any case. I'm also send separate email to Tom Tromey about how i should assign copyright for the community. On Wed, Jun 29, 2011 at 2:35 AM, Phil Muldoon <pmuldoon@redhat.com> wrote: > Tom Tromey <tromey@redhat.com> writes: >> Whether this one meets the bar, I don't know. ?Is basename really the >> obvious transform to apply? ?What about just dropping the compilation >> directory? > > Well in this context, user-driven needs, to me, are the best bar. ?If > this contributor has written this patch, with a specific need (nota > super-specialised) in mind that is great. ?I wish I had the backtrace > Pythonic interface ready, but, OTOH, every use-case is great to mould > that functionality. > > Cheers, > > Phil > I thought on cutting off compilation path but i decided to make it easier to start. If my tiny patch and idea is useful for somebody i glad to improve this. -- With best regards. Eldar Gaynetdinov
diff -rup gdb-7.2-orig/gdb/frame.h gdb-7.2/gdb/frame.h --- gdb-7.2-orig/gdb/frame.h 2010-01-01 10:31:32.000000000 +0300 +++ gdb-7.2/gdb/frame.h 2011-07-03 17:49:36.748460000 +0400 @@ -582,7 +582,10 @@ enum print_what /* Print both of the above. */ SRC_AND_LOC, /* Print location only, but always include the address. */ - LOC_AND_ADDRESS + LOC_AND_ADDRESS, + /* Print only the location but without the full path to file, * + * i.e. print only filename even if full path is defined in symtable. */ + LOC_NO_FULLPATH }; /* Allocate zero initialized memory from the frame cache obstack. diff -rup gdb-7.2-orig/gdb/stack.c gdb-7.2/gdb/stack.c --- gdb-7.2-orig/gdb/stack.c 2010-07-01 19:36:17.000000000 +0400 +++ gdb-7.2/gdb/stack.c 2011-07-03 18:03:23.308460001 +0400 @@ -592,7 +592,8 @@ print_frame_info (struct frame_info *fra location_print = (print_what == LOCATION || print_what == LOC_AND_ADDRESS - || print_what == SRC_AND_LOC); + || print_what == SRC_AND_LOC + || print_what == LOC_NO_FULLPATH); if (location_print || !sal.symtab) print_frame (frame, print_level, print_what, print_args, sal); @@ -652,7 +653,7 @@ print_frame_info (struct frame_info *fra do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end); } - if (print_what != LOCATION) + if (print_what != LOCATION || print_what != LOC_NO_FULLPATH) set_default_breakpoint (1, sal.pspace, get_frame_pc (frame), sal.symtab, sal.line); @@ -810,11 +811,24 @@ print_frame (struct frame_info *frame, i ui_out_text (uiout, ")"); if (sal.symtab && sal.symtab->filename) { + const char *filename; + annotate_frame_source_begin (); ui_out_wrap_hint (uiout, " "); ui_out_text (uiout, " at "); annotate_frame_source_file (); - ui_out_field_string (uiout, "file", sal.symtab->filename); + + filename = NULL; + if (print_what == LOC_NO_FULLPATH) + { + filename = strrchr (sal.symtab->filename, '/'); + if (filename != NULL) + filename++; + } + if (filename == NULL || *filename == '\0') + filename = sal.symtab->filename; + + ui_out_field_string (uiout, "file", filename); if (ui_out_is_mi_like_p (uiout)) { const char *fullname = symtab_to_fullname (sal.symtab); @@ -1269,7 +1283,7 @@ frame_info (char *addr_exp, int from_tty frames. */ static void -backtrace_command_1 (char *count_exp, int show_locals, int from_tty) +backtrace_command_1 (char *count_exp, int show_locals, int from_tty, int nofull_path) { struct frame_info *fi; int count; @@ -1345,7 +1359,11 @@ backtrace_command_1 (char *count_exp, in means further attempts to backtrace would fail (on the other hand, perhaps the code does or could be fixed to make sure the frame->prev field gets set to NULL in that case). */ - print_frame_info (fi, 1, LOCATION, 1); + if (nofull_path) + print_frame_info (fi, 1, LOC_NO_FULLPATH, 1); + else + print_frame_info (fi, 1, LOCATION, 1); + if (show_locals) print_frame_local_vars (fi, 1, gdb_stdout); @@ -1375,6 +1393,7 @@ struct backtrace_command_args char *count_exp; int show_locals; int from_tty; + int nofull_path; }; /* Stub for catch_errors. */ @@ -1384,7 +1403,8 @@ backtrace_command_stub (void *data) { struct backtrace_command_args *args = data; - backtrace_command_1 (args->count_exp, args->show_locals, args->from_tty); + backtrace_command_1 (args->count_exp, args->show_locals, + args->from_tty, args->nofull_path); return 0; } @@ -1392,7 +1412,7 @@ static void backtrace_command (char *arg, int from_tty) { struct cleanup *old_chain = NULL; - int fulltrace_arg = -1, arglen = 0, argc = 0; + int fulltrace_arg = -1, arglen = 0, argc = 0, nofull_path = -1; struct backtrace_command_args btargs; if (arg) @@ -1412,6 +1432,8 @@ backtrace_command (char *arg, int from_t if (fulltrace_arg < 0 && subset_compare (argv[i], "full")) fulltrace_arg = argc; + else if (nofull_path < 0 && subset_compare (argv[i], "nopath")) + nofull_path = argc; else { arglen += strlen (argv[i]); @@ -1419,7 +1441,7 @@ backtrace_command (char *arg, int from_t } } arglen += argc; - if (fulltrace_arg >= 0) + if (fulltrace_arg >= 0 || nofull_path >= 0) { if (arglen > 0) { @@ -1427,7 +1449,7 @@ backtrace_command (char *arg, int from_t memset (arg, 0, arglen + 1); for (i = 0; i < (argc + 1); i++) { - if (i != fulltrace_arg) + if (i != fulltrace_arg && i != nofull_path) { strcat (arg, argv[i]); strcat (arg, " "); @@ -1442,9 +1464,10 @@ backtrace_command (char *arg, int from_t btargs.count_exp = arg; btargs.show_locals = (fulltrace_arg >= 0); btargs.from_tty = from_tty; + btargs.nofull_path = (nofull_path >= 0); catch_errors (backtrace_command_stub, &btargs, "", RETURN_MASK_ERROR); - if (fulltrace_arg >= 0 && arglen > 0) + if ((fulltrace_arg >= 0 || nofull_path >= 0) && arglen > 0) xfree (arg); if (old_chain) @@ -1459,6 +1482,7 @@ backtrace_full_command (char *arg, int f btargs.count_exp = arg; btargs.show_locals = 1; btargs.from_tty = from_tty; + btargs.nofull_path = 0; catch_errors (backtrace_command_stub, &btargs, "", RETURN_MASK_ERROR); }
diff -rup gdb-7.2-doc-orig/gdb/doc/gdb.texinfo gdb-7.2/gdb/doc/gdb.texinfo --- gdb-7.2-doc-orig/gdb/doc/gdb.texinfo 2010-09-01 23:15:59.000000000 +0400 +++ gdb-7.2/gdb/doc/gdb.texinfo 2011-07-03 17:36:48.328460001 +0400 @@ -5890,6 +5890,10 @@ Similar, but print only the outermost @v @itemx bt full -@var{n} Print the values of the local variables also. @var{n} specifies the number of frames to print, as described above. + +@item backtrace nopath +@itemx bt nopath +It's similar to @code{backtrace}, but print without full path to file. @end table @kindex where
Attachment:
ChangeLog
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |