2011-08-09 Phil Muldoon <pmuldoon@redhat.com>

* python/lib/gdb/__init__.py: Auto-load files in command and
	function directories.
	* python/python.c (finish_python_initialization): Use
	os.path.join.
	* python/lib/gdb/command/pretty_printers.py: Self register
	command.
	* NEWS: Document auto-loading.

2011-08-09  Phil Muldoon  <pmuldoon@redhat.com>

	* gdb.texinfo (Python): Document command and function
	auto-loading.
This commit is contained in:
Phil Muldoon 2011-08-09 12:45:40 +00:00
parent 7fe550fc49
commit 5e239b84ac
7 changed files with 55 additions and 4 deletions

View file

@ -1,3 +1,13 @@
2011-08-09 Phil Muldoon <pmuldoon@redhat.com>
* python/lib/gdb/__init__.py: Auto-load files in command and
function directories.
* python/python.c (finish_python_initialization): Use
os.path.join.
* python/lib/gdb/command/pretty_printers.py: Self register
command.
* NEWS: Document auto-loading.
2011-08-08 Jan Kratochvil <jan.kratochvil@redhat.com> 2011-08-08 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2loc.c (dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_STACK> * dwarf2loc.c (dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_STACK>

View file

@ -23,6 +23,11 @@
** A prompt subsitution hook (prompt_hook) is now available to the ** A prompt subsitution hook (prompt_hook) is now available to the
Python API. Python API.
** Python commands and convenience-functions located in
'data-directory'/python/gdb/command and
'data-directory'/python/gdb/function are now automatically loaded
on GDB start-up.
* libthread-db-search-path now supports two special values: $sdir and $pdir. * libthread-db-search-path now supports two special values: $sdir and $pdir.
$sdir specifies the default system locations of shared libraries. $sdir specifies the default system locations of shared libraries.
$pdir specifies the directory where the libpthread used by the application $pdir specifies the directory where the libpthread used by the application

View file

@ -1,3 +1,8 @@
2011-08-09 Phil Muldoon <pmuldoon@redhat.com>
* gdb.texinfo (Python): Document command and function
auto-loading.
2011-07-26 Jan Kratochvil <jan.kratochvil@redhat.com> 2011-07-26 Jan Kratochvil <jan.kratochvil@redhat.com>
Eli Zaretskii <eliz@gnu.org> Eli Zaretskii <eliz@gnu.org>

View file

@ -20845,6 +20845,12 @@ This directory, known as the @dfn{python directory},
is automatically added to the Python Search Path in order to allow is automatically added to the Python Search Path in order to allow
the Python interpreter to locate all scripts installed at this location. the Python interpreter to locate all scripts installed at this location.
Additionally, @value{GDBN} commands and convenience functions which
are written in Python and are located in the
@file{@var{data-directory}/python/gdb/command} or
@file{@var{data-directory}/python/gdb/function} directories are
automatically imported when @value{GDBN} starts.
@menu @menu
* Python Commands:: Accessing Python from @value{GDBN}. * Python Commands:: Accessing Python from @value{GDBN}.
* Python API:: Accessing @value{GDBN} from Python. * Python API:: Accessing @value{GDBN} from Python.

View file

@ -13,6 +13,29 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import gdb.command.pretty_printers import traceback
gdb.command.pretty_printers.register_pretty_printer_commands() # Auto-load all functions/commands.
# Modules to auto-load, and the paths where those modules exist.
module_dict = {
'gdb.function': os.path.join(gdb.PYTHONDIR, 'gdb', 'function'),
'gdb.command': os.path.join(gdb.PYTHONDIR, 'gdb', 'command')
}
# Iterate the dictionary, collating the Python files in each module
# path. Construct the module name, and import.
for module, location in module_dict.iteritems():
if os.path.exists(location):
py_files = filter(lambda x: x.endswith('.py') and x != '__init__.py',
os.listdir(location))
for py_file in py_files:
# Construct from foo.py, gdb.module.foo
py_file = module + '.' + py_file[:-3]
try:
exec('import ' + py_file)
except:
print >> sys.stderr, traceback.format_exc()

View file

@ -368,3 +368,5 @@ def register_pretty_printer_commands():
InfoPrettyPrinter() InfoPrettyPrinter()
EnablePrettyPrinter() EnablePrettyPrinter()
DisablePrettyPrinter() DisablePrettyPrinter()
register_pretty_printer_commands()

View file

@ -1302,13 +1302,13 @@ def GdbSetPythonDirectory (dir):\n\
sys.path.insert (0, gdb.PYTHONDIR)\n\ sys.path.insert (0, gdb.PYTHONDIR)\n\
\n\ \n\
# Tell python where to find submodules of gdb.\n\ # Tell python where to find submodules of gdb.\n\
gdb.__path__ = [gdb.PYTHONDIR + '/gdb']\n\ gdb.__path__ = [os.path.join (gdb.PYTHONDIR, 'gdb')]\n\
\n\ \n\
# The gdb module is implemented in C rather than in Python. As a result,\n\ # The gdb module is implemented in C rather than in Python. As a result,\n\
# the associated __init.py__ script is not not executed by default when\n\ # the associated __init.py__ script is not not executed by default when\n\
# the gdb module gets imported. Execute that script manually if it\n\ # the gdb module gets imported. Execute that script manually if it\n\
# exists.\n\ # exists.\n\
ipy = gdb.PYTHONDIR + '/gdb/__init__.py'\n\ ipy = os.path.join (gdb.PYTHONDIR, 'gdb', '__init__.py')\n\
if os.path.exists (ipy):\n\ if os.path.exists (ipy):\n\
execfile (ipy)\n\ execfile (ipy)\n\
\n\ \n\