diff options
Diffstat (limited to 'gdb/printcmd.c')
-rw-r--r-- | gdb/printcmd.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/gdb/printcmd.c b/gdb/printcmd.c index b5bf3d8..6aca2f5 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -73,6 +73,10 @@ static value last_examine_value; static unsigned int max_symbolic_offset = UINT_MAX; +/* Append the source filename and linenumber of the symbol when + printing a symbolic value as `<symbol at filename:linenum>' if set. */ +static int print_symbol_filename = 0; + /* Number of auto-display expression currently being displayed. So that we can disable it if we get an error or a signal within it. -1 when not doing one. */ @@ -582,9 +586,16 @@ print_address_symbolic (addr, stream, do_demangle, leadin) fputs_filtered ("<", stream); fputs_filtered (name, stream); if (addr != name_location) - fprintf_filtered (stream, "+%u>", (unsigned int)(addr - name_location)); - else - fputs_filtered (">", stream); + fprintf_filtered (stream, "+%u", (unsigned int)(addr - name_location)); + + /* Append source filename and line number if desired. */ + if (symbol && print_symbol_filename) + { + struct symtab_and_line sal = find_pc_line (addr, 0); + if (sal.symtab) + fprintf_filtered (stream, " at %s:%d", sal.symtab->filename, sal.line); + } + fputs_filtered (">", stream); } /* Print address ADDR symbolically on STREAM. @@ -2070,4 +2081,10 @@ environment, the value is printed in its own window."); "Set the largest offset that will be printed in <symbol+1234> form.", &setprintlist), &showprintlist); + add_show_from_set ( + add_set_cmd ("symbol-filename", no_class, var_boolean, + (char *)&print_symbol_filename, + "Set printing of source filename and line number with <symbol>.", + &setprintlist), + &showprintlist); } |