mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 02:24:46 +08:00
gdb: New maint info line-table command.
Add a new command 'maint info line-table' to display the contents of GDB's internal line table structure. Useful when trying to understand problems (within gdb) relating to line tables. gdb/ChangeLog: * symmisc.c (maintenance_info_line_tables): New function. (maintenance_print_one_line_table): New function. (_initialize_symmisc): Register 'maint info line-table' command. * NEWS: Mention new command. gdb/doc/ChangeLog: * gdb.texinfo (Symbols): Document new 'maint info line-table' command. gdb/testsuite/ChangeLog: * gdb.base/maint.exp: New tests for 'maint info line-table'.
This commit is contained in:
parent
c4b3e547d5
commit
f2403c3934
@ -1,3 +1,10 @@
|
||||
2016-03-11 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* symmisc.c (maintenance_info_line_tables): New function.
|
||||
(maintenance_print_one_line_table): New function.
|
||||
(_initialize_symmisc): Register 'maint info line-table' command.
|
||||
* NEWS: Mention new command.
|
||||
|
||||
2016-03-11 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* s390-linux-tdep.c (s390_ax_pseudo_register_collect): New function.
|
||||
|
3
gdb/NEWS
3
gdb/NEWS
@ -31,6 +31,9 @@ skip -rfunction regular-expression
|
||||
glob-style file names and regular expressions for function names.
|
||||
Additionally, a file spec and a function spec may now be combined.
|
||||
|
||||
maint info line-table REGEXP
|
||||
Display the contents of GDB's internal line table data struture.
|
||||
|
||||
*** Changes in GDB 7.11
|
||||
|
||||
* GDB now supports debugging kernel-based threads on FreeBSD.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-03-11 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.texinfo (Symbols): Document new 'maint info line-table'
|
||||
command.
|
||||
|
||||
2016-03-10 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* gdb.texinfo (Convenience Functions): Document $_as_string.
|
||||
|
@ -17175,6 +17175,15 @@ line 1574.
|
||||
(@value{GDBP})
|
||||
@end smallexample
|
||||
|
||||
@kindex maint info line-table
|
||||
@cindex listing @value{GDBN}'s internal line tables
|
||||
@cindex line tables, listing @value{GDBN}'s internal
|
||||
@item maint info line-table @r{[} @var{regexp} @r{]}
|
||||
|
||||
List the @code{struct linetable} from all @code{struct symtab}
|
||||
instances whose name matches @var{regexp}. If @var{regexp} is not
|
||||
given, list the @code{struct linetable} from all @code{struct symtab}.
|
||||
|
||||
@kindex maint set symbol-cache-size
|
||||
@cindex symbol cache size
|
||||
@item maint set symbol-cache-size @var{size}
|
||||
|
@ -949,6 +949,90 @@ block_depth (struct block *block)
|
||||
}
|
||||
|
||||
|
||||
/* Used by MAINTENANCE_INFO_LINE_TABLES to print the information about a
|
||||
single line table. */
|
||||
|
||||
static int
|
||||
maintenance_print_one_line_table (struct symtab *symtab, void *data)
|
||||
{
|
||||
struct linetable *linetable;
|
||||
struct objfile *objfile;
|
||||
|
||||
objfile = symtab->compunit_symtab->objfile;
|
||||
printf_filtered (_("objfile: %s ((struct objfile *) %s)\n"),
|
||||
objfile_name (objfile),
|
||||
host_address_to_string (objfile));
|
||||
printf_filtered (_("compunit_symtab: ((struct compunit_symtab *) %s)\n"),
|
||||
host_address_to_string (symtab->compunit_symtab));
|
||||
printf_filtered (_("symtab: %s ((struct symtab *) %s)\n"),
|
||||
symtab_to_fullname (symtab),
|
||||
host_address_to_string (symtab));
|
||||
linetable = SYMTAB_LINETABLE (symtab);
|
||||
printf_filtered (_("linetable: ((struct linetable *) %s):\n"),
|
||||
host_address_to_string (linetable));
|
||||
|
||||
if (linetable == NULL)
|
||||
printf_filtered (_("No line table.\n"));
|
||||
else if (linetable->nitems <= 0)
|
||||
printf_filtered (_("Line table has no lines.\n"));
|
||||
else
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Leave space for 6 digits of index and line number. After that the
|
||||
tables will just not format as well. */
|
||||
printf_filtered (_("%-6s %6s %s\n"),
|
||||
_("INDEX"), _("LINE"), _("ADDRESS"));
|
||||
|
||||
for (i = 0; i < linetable->nitems; ++i)
|
||||
{
|
||||
struct linetable_entry *item;
|
||||
struct cleanup *row_cleanup;
|
||||
|
||||
item = &linetable->item [i];
|
||||
printf_filtered (_("%-6d %6d %s\n"), i, item->line,
|
||||
core_addr_to_string (item->pc));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Implement the 'maint info line-table' command. */
|
||||
|
||||
static void
|
||||
maintenance_info_line_tables (char *regexp, int from_tty)
|
||||
{
|
||||
struct program_space *pspace;
|
||||
struct objfile *objfile;
|
||||
|
||||
dont_repeat ();
|
||||
|
||||
if (regexp != NULL)
|
||||
re_comp (regexp);
|
||||
|
||||
ALL_PSPACES (pspace)
|
||||
ALL_PSPACE_OBJFILES (pspace, objfile)
|
||||
{
|
||||
struct compunit_symtab *cust;
|
||||
struct symtab *symtab;
|
||||
|
||||
ALL_OBJFILE_COMPUNITS (objfile, cust)
|
||||
{
|
||||
ALL_COMPUNIT_FILETABS (cust, symtab)
|
||||
{
|
||||
QUIT;
|
||||
|
||||
if (regexp == NULL
|
||||
|| re_exec (symtab_to_filename_for_display (symtab)))
|
||||
maintenance_print_one_line_table (symtab, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Do early runtime initializations. */
|
||||
|
||||
void
|
||||
@ -982,6 +1066,12 @@ linetables --- just the symbol table structures themselves.\n\
|
||||
With an argument REGEXP, list the symbol tables with matching names."),
|
||||
&maintenanceinfolist);
|
||||
|
||||
add_cmd ("line-table", class_maintenance, maintenance_info_line_tables, _("\
|
||||
List the contents of all line tables, from all symbol tables.\n\
|
||||
With an argument REGEXP, list just the line tables for the symbol\n\
|
||||
tables with matching names."),
|
||||
&maintenanceinfolist);
|
||||
|
||||
add_cmd ("check-symtabs", class_maintenance, maintenance_check_symtabs,
|
||||
_("\
|
||||
Check consistency of currently expanded symtabs."),
|
||||
|
@ -1,3 +1,7 @@
|
||||
2016-03-11 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.base/maint.exp: New tests for 'maint info line-table'.
|
||||
|
||||
2016-03-10 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* gdb.python/py-as-string.exp: New file.
|
||||
|
@ -471,6 +471,26 @@ gdb_test "maint" \
|
||||
"\"maintenance\" must be followed by the name of a maintenance command\\.\r\nList.*unambiguous\\..*" \
|
||||
"maint w/o args"
|
||||
|
||||
gdb_test "maint info line-table" \
|
||||
"symtab: \[^\n\r\]+${srcfile}.*\\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX.*LINE.*ADDRESS.*" \
|
||||
"maint info line-table w/o a file name"
|
||||
|
||||
gdb_test "maint info line-table ${srcfile}" \
|
||||
"symtab: \[^\n\r\]+${srcfile}.*INDEX.*LINE.*ADDRESS.*" \
|
||||
"maint info line-table with filename of current symtab"
|
||||
|
||||
gdb_test_no_output "maint info line-table ${srcfile2}" \
|
||||
"maint info line-table with filename of symtab that is not currently expanded"
|
||||
|
||||
gdb_test_no_output "maint expand-symtabs"
|
||||
|
||||
gdb_test "maint info line-table ${srcfile2}" \
|
||||
"symtab: \[^\n\r\]+${srcfile2}.*INDEX.*LINE.*ADDRESS.*" \
|
||||
"maint info line-table with filename of symtab that is not current"
|
||||
|
||||
gdb_test_no_output "maint info line-table xxx.c" \
|
||||
"maint info line-table with invalid filename"
|
||||
|
||||
set timeout $oldtimeout
|
||||
|
||||
#============test help on maint commands
|
||||
|
Loading…
Reference in New Issue
Block a user