2012-05-13 Siva Chandra Reddy <sivachandra@google.com>

Add a new function gdb.find_pc_line to the Python API.
	* NEWS (Python Scripting): Add entry about the new function.
	* python/python.c (gdbpy_find_pc_line): New function which
	implements gdb.find_pc_line.
	(GdbMethods): Add entry for the new function.

	doc/
	* gdb.texinfo (Basic Python): Add description about the function
	gdb.find_pc_line

	testsuite/
	* gdb.python/python.c: Add a new breakpoint comment.
	* gdb.python/python.exp: Add tests to test gdb.find_pc_line.
This commit is contained in:
Siva Chandra Reddy 2012-05-13 11:33:44 +00:00
parent 02277eae00
commit 7efc75aaf9
8 changed files with 72 additions and 1 deletions

View file

@ -1,3 +1,11 @@
2012-05-13 Siva Chandra Reddy <sivachandra@google.com>
Add a new function gdb.find_pc_line to the Python API.
* NEWS (Python Scripting): Add entry about the new function.
* python/python.c (gdbpy_find_pc_line): New function which
implements gdb.find_pc_line.
(GdbMethods): Add entry for the new function.
2012-05-12 Pedro Alves <palves@redhat.com> 2012-05-12 Pedro Alves <palves@redhat.com>
* amd64-linux-tdep.c (_initialize_amd64_linux_tdep): Call * amd64-linux-tdep.c (_initialize_amd64_linux_tdep): Call

View file

@ -53,6 +53,9 @@
which return the global and static blocks (as gdb.Block objects), which return the global and static blocks (as gdb.Block objects),
of the underlying symbol table, respectively. of the underlying symbol table, respectively.
** New function gdb.find_pc_line which returns the gdb.Symtab_and_line
object associated with a PC value.
* Go language support. * Go language support.
GDB now supports debugging programs written in the Go programming GDB now supports debugging programs written in the Go programming
language. language.

View file

@ -1,3 +1,8 @@
2012-05-13 Siva Chandra Reddy <sivachandra@google.com>
* gdb.texinfo (Basic Python): Add description about the function
gdb.find_pc_line
2012-05-12 Jan Kratochvil <jan.kratochvil@redhat.com> 2012-05-12 Jan Kratochvil <jan.kratochvil@redhat.com>
Eli Zaretskii <eliz@gnu.org> Eli Zaretskii <eliz@gnu.org>

View file

@ -22508,6 +22508,15 @@ compute values, for example, it is the only way to get the value of a
convenience variable (@pxref{Convenience Vars}) as a @code{gdb.Value}. convenience variable (@pxref{Convenience Vars}) as a @code{gdb.Value}.
@end defun @end defun
@findex gdb.find_pc_line
@defun gdb.find_pc_line (pc)
Return the @code{gdb.Symtab_and_line} object corresponding to the
@var{pc} value. @xref{Symbol Tables In Python}. If an invalid
value of @var{pc} is passed as an argument, then the @code{symtab} and
@code{line} attributes of the returned @code{gdb.Symtab_and_line} object
will be @code{None} and 0 respectively.
@end defun
@findex gdb.post_event @findex gdb.post_event
@defun gdb.post_event (event) @defun gdb.post_event (event)
Put @var{event}, a callable object taking no arguments, into Put @var{event}, a callable object taking no arguments, into

View file

@ -631,6 +631,24 @@ gdbpy_parse_and_eval (PyObject *self, PyObject *args)
return value_to_value_object (result); return value_to_value_object (result);
} }
/* Implementation of gdb.find_pc_line function.
Returns the gdb.Symtab_and_line object corresponding to a PC value. */
static PyObject *
gdbpy_find_pc_line (PyObject *self, PyObject *args)
{
struct symtab_and_line sal;
CORE_ADDR pc;
unsigned long long pc_llu;
if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc_llu))
return NULL;
pc = (CORE_ADDR) pc_llu;
sal = find_pc_line (pc, 0);
return symtab_and_line_to_sal_object (sal);
}
/* Read a file as Python code. /* Read a file as Python code.
FILE is the file to run. FILENAME is name of the file FILE. FILE is the file to run. FILENAME is name of the file FILE.
This does not throw any errors. If an exception occurs python will print This does not throw any errors. If an exception occurs python will print
@ -1458,6 +1476,9 @@ gdb.Symtab_and_line objects (or None)."},
"parse_and_eval (String) -> Value.\n\ "parse_and_eval (String) -> Value.\n\
Parse String as an expression, evaluate it, and return the result as a Value." Parse String as an expression, evaluate it, and return the result as a Value."
}, },
{ "find_pc_line", gdbpy_find_pc_line, METH_VARARGS,
"find_pc_line (pc) -> Symtab_and_line.\n\
Return the gdb.Symtab_and_line object corresponding to the pc value." },
{ "post_event", gdbpy_post_event, METH_VARARGS, { "post_event", gdbpy_post_event, METH_VARARGS,
"Post an event into gdb's event loop." }, "Post an event into gdb's event loop." },

View file

@ -1,3 +1,8 @@
2012-05-13 Siva Chandra Reddy <sivachandra@google.com>
* gdb.python/python.c: Add a new breakpoint comment.
* gdb.python/python.exp: Add tests to test gdb.find_pc_line.
2011-12-26 Kwok Cheung Yeung <kcy@codesourcery.com> 2011-12-26 Kwok Cheung Yeung <kcy@codesourcery.com>
* gdb.base/info-os.exp: New file. * gdb.base/info-os.exp: New file.

View file

@ -23,6 +23,6 @@ int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
func1 (); func1 ();
func2 (); func2 (); /* Break at func2 call site. */
return 0; /* Break to end. */ return 0; /* Break to end. */
} }

View file

@ -367,3 +367,23 @@ gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \ gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
"set the hook to default" 1 "set the hook to default" 1
# Start with a fresh gdb.
clean_restart ${testfile}
# The following tests require execution.
if ![runto_main] then {
fail "Can't run to main"
return 0
}
runto [gdb_get_line_number "Break at func2 call site."]
gdb_py_test_silent_cmd "python line = gdb.selected_frame().find_sal().line" "Get line number of func2 call site" 1
gdb_test "python print gdb.find_pc_line(gdb.selected_frame().pc()).line == line" "True" "Test find_pc_line at func2 call site"
gdb_py_test_silent_cmd "step" "Step into func2" 1
gdb_py_test_silent_cmd "up" "Step out of func2" 1
gdb_test "python print gdb.find_pc_line(gdb.selected_frame().pc()).line > line" "True" "Test find_pc_line with resume address"