Add gdb.lookup_global_symbol python function.
* NEWS: Add entry. * python/py-symbol.c (gdbpy_lookup_global_symbol): New function. * python/python-internal.h (gdbpy_lookup_global_symbol): Declare it. * python/python.c (GdbMethods): Add entry for lookup_global_symbol. doc/ * gdb.texinfo (Symbols In Python): Document lookup_global_symbol. Clarify behaviour of lookup_symbol when `block' argument is omitted, add description of result, fix @defun formatting. testsuite/ * gdb.python/py-symbol.exp: Test lookup_global_symbol.
This commit is contained in:
parent
1d41d745ca
commit
6e6fbe60bc
9 changed files with 92 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2011-02-22 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
Add gdb.lookup_global_symbol python function.
|
||||||
|
* NEWS: Add entry.
|
||||||
|
* python/py-symbol.c (gdbpy_lookup_global_symbol): New function.
|
||||||
|
* python/python-internal.h (gdbpy_lookup_global_symbol): Declare it.
|
||||||
|
* python/python.c (GdbMethods): Add entry for lookup_global_symbol.
|
||||||
|
|
||||||
2011-02-22 Tom Tromey <tromey@redhat.com>
|
2011-02-22 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* language.c (language_class_name_from_physname): Rename
|
* language.c (language_class_name_from_physname): Rename
|
||||||
|
|
2
gdb/NEWS
2
gdb/NEWS
|
@ -38,6 +38,8 @@
|
||||||
|
|
||||||
* Python scripting
|
* Python scripting
|
||||||
|
|
||||||
|
** New function gdb.lookup_global_symbol looks up a global symbol.
|
||||||
|
|
||||||
** GDB values in Python are now callable if the value represents a
|
** GDB values in Python are now callable if the value represents a
|
||||||
function. For example, if 'some_value' represents a function that
|
function. For example, if 'some_value' represents a function that
|
||||||
takes two integer parameters and returns a value, you can call
|
takes two integer parameters and returns a value, you can call
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2011-02-22 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* gdb.texinfo (Symbols In Python): Document lookup_global_symbol.
|
||||||
|
Clarify behaviour of lookup_symbol when `block' argument is omitted,
|
||||||
|
add description of result, fix @defun formatting.
|
||||||
|
|
||||||
2011-02-21 Hui Zhu <teawater@gmail.com>
|
2011-02-21 Hui Zhu <teawater@gmail.com>
|
||||||
|
|
||||||
* agentexpr.texi (Bytecode Descriptions): Add printf.
|
* agentexpr.texi (Bytecode Descriptions): Add printf.
|
||||||
|
|
|
@ -22829,7 +22829,7 @@ The following symbol-related functions are available in the @code{gdb}
|
||||||
module:
|
module:
|
||||||
|
|
||||||
@findex gdb.lookup_symbol
|
@findex gdb.lookup_symbol
|
||||||
@defun lookup_symbol name [block] [domain]
|
@defun lookup_symbol name @r{[}block@r{]} @r{[}domain@r{]}
|
||||||
This function searches for a symbol by name. The search scope can be
|
This function searches for a symbol by name. The search scope can be
|
||||||
restricted to the parameters defined in the optional domain and block
|
restricted to the parameters defined in the optional domain and block
|
||||||
arguments.
|
arguments.
|
||||||
|
@ -22837,10 +22837,33 @@ arguments.
|
||||||
@var{name} is the name of the symbol. It must be a string. The
|
@var{name} is the name of the symbol. It must be a string. The
|
||||||
optional @var{block} argument restricts the search to symbols visible
|
optional @var{block} argument restricts the search to symbols visible
|
||||||
in that @var{block}. The @var{block} argument must be a
|
in that @var{block}. The @var{block} argument must be a
|
||||||
@code{gdb.Block} object. The optional @var{domain} argument restricts
|
@code{gdb.Block} object. If omitted, the block for the current frame
|
||||||
|
is used. The optional @var{domain} argument restricts
|
||||||
the search to the domain type. The @var{domain} argument must be a
|
the search to the domain type. The @var{domain} argument must be a
|
||||||
domain constant defined in the @code{gdb} module and described later
|
domain constant defined in the @code{gdb} module and described later
|
||||||
in this chapter.
|
in this chapter.
|
||||||
|
|
||||||
|
The result is a tuple of two elements.
|
||||||
|
The first element is a @code{gdb.Symbol} object or @code{None} if the symbol
|
||||||
|
is not found.
|
||||||
|
If the symbol is found, the second element is @code{True} if the symbol
|
||||||
|
is a field of a method's object (e.g., @code{this} in @code{C++}),
|
||||||
|
otherwise it is @code{False}.
|
||||||
|
If the symbol is not found, the second element is @code{False}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@findex gdb.lookup_global_symbol
|
||||||
|
@defun lookup_global_symbol name @r{[}domain@r{]}
|
||||||
|
This function searches for a global symbol by name.
|
||||||
|
The search scope can be restricted to by the domain argument.
|
||||||
|
|
||||||
|
@var{name} is the name of the symbol. It must be a string.
|
||||||
|
The optional @var{domain} argument restricts the search to the domain type.
|
||||||
|
The @var{domain} argument must be a domain constant defined in the @code{gdb}
|
||||||
|
module and described later in this chapter.
|
||||||
|
|
||||||
|
The result is a @code{gdb.Symbol} object or @code{None} if the symbol
|
||||||
|
is not found.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
A @code{gdb.Symbol} object has the following attributes:
|
A @code{gdb.Symbol} object has the following attributes:
|
||||||
|
|
|
@ -236,6 +236,7 @@ sympy_dealloc (PyObject *obj)
|
||||||
A tuple with 2 elements is always returned. The first is the symbol
|
A tuple with 2 elements is always returned. The first is the symbol
|
||||||
object or None, the second is a boolean with the value of
|
object or None, the second is a boolean with the value of
|
||||||
is_a_field_of_this (see comment in lookup_symbol_in_language). */
|
is_a_field_of_this (see comment in lookup_symbol_in_language). */
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw)
|
gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw)
|
||||||
{
|
{
|
||||||
|
@ -294,6 +295,39 @@ gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw)
|
||||||
return ret_tuple;
|
return ret_tuple;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Implementation of
|
||||||
|
gdb.lookup_global_symbol (name [, domain]) -> symbol or None. */
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
gdbpy_lookup_global_symbol (PyObject *self, PyObject *args, PyObject *kw)
|
||||||
|
{
|
||||||
|
int domain = VAR_DOMAIN;
|
||||||
|
const char *name;
|
||||||
|
static char *keywords[] = { "name", "domain", NULL };
|
||||||
|
struct symbol *symbol;
|
||||||
|
PyObject *sym_obj;
|
||||||
|
|
||||||
|
if (! PyArg_ParseTupleAndKeywords (args, kw, "s|i", keywords, &name,
|
||||||
|
&domain))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
symbol = lookup_symbol_global (name, NULL, domain);
|
||||||
|
|
||||||
|
if (symbol)
|
||||||
|
{
|
||||||
|
sym_obj = symbol_to_symbol_object (symbol);
|
||||||
|
if (!sym_obj)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sym_obj = Py_None;
|
||||||
|
Py_INCREF (Py_None);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sym_obj;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function is called when an objfile is about to be freed.
|
/* This function is called when an objfile is about to be freed.
|
||||||
Invalidate the symbol as further actions on the symbol would result
|
Invalidate the symbol as further actions on the symbol would result
|
||||||
in bad data. All access to obj->symbol should be gated by
|
in bad data. All access to obj->symbol should be gated by
|
||||||
|
|
|
@ -136,6 +136,8 @@ PyObject *gdbpy_history (PyObject *self, PyObject *args);
|
||||||
PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
|
PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
|
||||||
PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
|
PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
|
||||||
PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw);
|
PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw);
|
||||||
|
PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args,
|
||||||
|
PyObject *kw);
|
||||||
PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args);
|
PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args);
|
||||||
PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args);
|
PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args);
|
||||||
PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args);
|
PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args);
|
||||||
|
|
|
@ -1145,6 +1145,10 @@ Return a Type corresponding to the given name." },
|
||||||
Return a tuple with the symbol corresponding to the given name (or None) and\n\
|
Return a tuple with the symbol corresponding to the given name (or None) and\n\
|
||||||
a boolean indicating if name is a field of the current implied argument\n\
|
a boolean indicating if name is a field of the current implied argument\n\
|
||||||
`this' (when the current language is object-oriented)." },
|
`this' (when the current language is object-oriented)." },
|
||||||
|
{ "lookup_global_symbol", (PyCFunction) gdbpy_lookup_global_symbol,
|
||||||
|
METH_VARARGS | METH_KEYWORDS,
|
||||||
|
"lookup_global_symbol (name [, domain]) -> symbol\n\
|
||||||
|
Return the symbol corresponding to the given name (or None)." },
|
||||||
{ "block_for_pc", gdbpy_block_for_pc, METH_VARARGS,
|
{ "block_for_pc", gdbpy_block_for_pc, METH_VARARGS,
|
||||||
"Return the block containing the given pc value, or None." },
|
"Return the block containing the given pc value, or None." },
|
||||||
{ "solib_name", gdbpy_solib_name, METH_VARARGS,
|
{ "solib_name", gdbpy_solib_name, METH_VARARGS,
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2011-02-22 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* gdb.python/py-symbol.exp: Test lookup_global_symbol.
|
||||||
|
|
||||||
2011-02-22 Michael Snyder <msnyder@vmware.com>
|
2011-02-22 Michael Snyder <msnyder@vmware.com>
|
||||||
|
|
||||||
* Makefile.in: Make more clean.
|
* Makefile.in: Make more clean.
|
||||||
|
|
|
@ -39,6 +39,13 @@ gdb_load ${binfile}
|
||||||
# Skip all tests if Python scripting is not enabled.
|
# Skip all tests if Python scripting is not enabled.
|
||||||
if { [skip_python_tests] } { continue }
|
if { [skip_python_tests] } { continue }
|
||||||
|
|
||||||
|
# Test looking up a global symbol before we runto_main as this is the
|
||||||
|
# point where we don't have a current frame, and we don't want to
|
||||||
|
# require one.
|
||||||
|
gdb_py_test_silent_cmd "python main_func = gdb.lookup_global_symbol(\"main\")" "Lookup main" 1
|
||||||
|
gdb_test "python print main_func.is_function" "True" "Test main_func.is_function"
|
||||||
|
gdb_test "python print gdb.lookup_global_symbol(\"junk\")" "None" "Test lookup_global_symbol(\"junk\")"
|
||||||
|
|
||||||
if ![runto_main] then {
|
if ![runto_main] then {
|
||||||
fail "Can't run to main"
|
fail "Can't run to main"
|
||||||
return 0
|
return 0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue