New python method gdb.Objfile.add_separate_debug_file.
gdb/ChangeLog: * NEWS: Mention gdb.Objfile.add_separate_debug_file. * python/py-objfile.c (objfpy_add_separate_debug_file): New function. (objfile_getset): Add "add_separate_debug_file". gdb/doc/ChangeLog: * python.texi (Objfiles In Python): Document Objfile.add_separate_debug_file. gdb/testsuite/ChangeLog: * gdb.python/py-objfile.exp: Add tests for objfile.add_separate_debug_file.
This commit is contained in:
parent
7c50a93137
commit
86e4ed3959
7 changed files with 86 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2014-12-04 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* NEWS: Mention gdb.Objfile.add_separate_debug_file.
|
||||||
|
* python/py-objfile.c (objfpy_add_separate_debug_file): New function.
|
||||||
|
(objfile_getset): Add "add_separate_debug_file".
|
||||||
|
|
||||||
2014-12-04 Doug Evans <dje@google.com>
|
2014-12-04 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* NEWS: Mention gdb.Objfile.build_id.
|
* NEWS: Mention gdb.Objfile.build_id.
|
||||||
|
|
1
gdb/NEWS
1
gdb/NEWS
|
@ -23,6 +23,7 @@
|
||||||
which is the gdb.Progspace object of the containing program space.
|
which is the gdb.Progspace object of the containing program space.
|
||||||
** gdb.Objfile objects have a new attribute "build_id",
|
** gdb.Objfile objects have a new attribute "build_id",
|
||||||
which is the build ID generated when the file was built.
|
which is the build ID generated when the file was built.
|
||||||
|
** gdb.Objfile objects have a new method "add_separate_debug_file".
|
||||||
** A new event "gdb.clear_objfiles" has been added, triggered when
|
** A new event "gdb.clear_objfiles" has been added, triggered when
|
||||||
selecting a new file to debug.
|
selecting a new file to debug.
|
||||||
** You can now add attributes to gdb.Objfile and gdb.Progspace objects.
|
** You can now add attributes to gdb.Objfile and gdb.Progspace objects.
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2014-12-04 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* python.texi (Objfiles In Python): Document
|
||||||
|
Objfile.add_separate_debug_file.
|
||||||
|
|
||||||
2014-12-04 Doug Evans <dje@google.com>
|
2014-12-04 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* python.texi (Objfiles In Python): Document Objfile.build_id.
|
* python.texi (Objfiles In Python): Document Objfile.build_id.
|
||||||
|
|
|
@ -3562,6 +3562,17 @@ longer. All other @code{gdb.Objfile} methods will throw an exception
|
||||||
if it is invalid at the time the method is called.
|
if it is invalid at the time the method is called.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
|
@defun Objfile.add_separate_debug_file (file)
|
||||||
|
Add @var{file} to the list of files that @value{GDBN} will search for
|
||||||
|
debug information for the objfile.
|
||||||
|
This is useful when the debug info has been removed from the program
|
||||||
|
and stored in a separate file. @value{GDBN} has built-in support for
|
||||||
|
finding separate debug info files (@pxref{Separate Debug Files}), but if
|
||||||
|
the file doesn't live in one of the standard places that @value{GDBN}
|
||||||
|
searches then this function can be used to add a debug info file
|
||||||
|
from a different place.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@node Frames In Python
|
@node Frames In Python
|
||||||
@subsubsection Accessing inferior stack frames from Python.
|
@subsubsection Accessing inferior stack frames from Python.
|
||||||
|
|
||||||
|
|
|
@ -334,6 +334,33 @@ objfpy_is_valid (PyObject *self, PyObject *args)
|
||||||
Py_RETURN_TRUE;
|
Py_RETURN_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Implementation of gdb.Objfile.add_separate_debug_file (self) -> Boolean. */
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
objfpy_add_separate_debug_file (PyObject *self, PyObject *args, PyObject *kw)
|
||||||
|
{
|
||||||
|
static char *keywords[] = { "file_name", NULL };
|
||||||
|
objfile_object *obj = (objfile_object *) self;
|
||||||
|
const char *file_name;
|
||||||
|
int symfile_flags = 0;
|
||||||
|
volatile struct gdb_exception except;
|
||||||
|
|
||||||
|
OBJFPY_REQUIRE_VALID (obj);
|
||||||
|
|
||||||
|
if (!PyArg_ParseTupleAndKeywords (args, kw, "s", keywords, &file_name))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
|
{
|
||||||
|
bfd *abfd = symfile_bfd_open (file_name);
|
||||||
|
|
||||||
|
symbol_file_add_separate (abfd, file_name, symfile_flags, obj->objfile);
|
||||||
|
}
|
||||||
|
GDB_PY_HANDLE_EXCEPTION (except);
|
||||||
|
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Clear the OBJFILE pointer in an Objfile object and remove the
|
/* Clear the OBJFILE pointer in an Objfile object and remove the
|
||||||
|
@ -401,6 +428,11 @@ static PyMethodDef objfile_object_methods[] =
|
||||||
"is_valid () -> Boolean.\n\
|
"is_valid () -> Boolean.\n\
|
||||||
Return true if this object file is valid, false if not." },
|
Return true if this object file is valid, false if not." },
|
||||||
|
|
||||||
|
{ "add_separate_debug_file", (PyCFunction) objfpy_add_separate_debug_file,
|
||||||
|
METH_VARARGS | METH_KEYWORDS,
|
||||||
|
"add_separate_debug_file (file_name).\n\
|
||||||
|
Add FILE_NAME to the list of files containing debug info for the objfile." },
|
||||||
|
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2014-12-04 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* gdb.python/py-objfile.exp: Add tests for
|
||||||
|
objfile.add_separate_debug_file.
|
||||||
|
|
||||||
2014-12-04 Doug Evans <dje@google.com>
|
2014-12-04 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* lib/gdb.exp (get_build_id): New function.
|
* lib/gdb.exp (get_build_id): New function.
|
||||||
|
|
|
@ -61,3 +61,29 @@ gdb_py_test_silent_cmd "python objfile.random_attribute = 42" \
|
||||||
"Set random attribute in objfile" 1
|
"Set random attribute in objfile" 1
|
||||||
gdb_test "python print (objfile.random_attribute)" "42" \
|
gdb_test "python print (objfile.random_attribute)" "42" \
|
||||||
"Verify set of random attribute in objfile"
|
"Verify set of random attribute in objfile"
|
||||||
|
|
||||||
|
# Now build another copy of the testcase, this time without debug info.
|
||||||
|
|
||||||
|
if { [prepare_for_testing ${testfile}.exp ${testfile}2 ${srcfile} {nodebug ldflags=-Wl,--strip-debug}] } {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if ![runto_main] {
|
||||||
|
fail "Can't run to main"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_py_test_silent_cmd "python objfile = gdb.objfiles()\[0\]" \
|
||||||
|
"Get no-debug objfile file" 1
|
||||||
|
|
||||||
|
gdb_test "p main" "= {<text variable, no debug info>} $hex <main>" \
|
||||||
|
"print main without debug info"
|
||||||
|
|
||||||
|
gdb_py_test_silent_cmd "python objfile.add_separate_debug_file(\"${binfile}\")" \
|
||||||
|
"Add separate debug file file" 1
|
||||||
|
|
||||||
|
gdb_py_test_silent_cmd "python sep_objfile = gdb.objfiles()\[0\]" \
|
||||||
|
"Get separate debug info objfile" 1
|
||||||
|
|
||||||
|
gdb_test "p main" "= {int \\(\\)} $hex <main>" \
|
||||||
|
"print main with debug info"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue