This is the mail archive of the
archer@sourceware.org
mailing list for the Archer project.
[python] two new commands
- From: Tom Tromey <tromey at redhat dot com>
- To: Project Archer <archer at sourceware dot org>
- Date: Tue, 02 Dec 2008 10:24:19 -0700
- Subject: [python] two new commands
- Reply-to: Tom Tromey <tromey at redhat dot com>
This adds a couple new commands to the Python branch.
"save breakpoints" is pretty obvious -- it saves your current
breakpoints to a file. You can "source" this file to restore them.
"ignore-errors" can be used to ignore errors in some other command.
For instance:
(gdb) print foo
No symbol table is loaded. Use the "file" command.
(gdb) ignore-errors print foo
(gdb)
This can be handy in "commands" scripts and the like.
Tom
2008-12-02 Tom Tromey <tromey@redhat.com>
* Makefile.in (PY_FILES): Add new files.
* python/lib/gdb/command/ignore_errors.py: New file.
* python/lib/gdb/command/save_breakpoints.py: New file.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 4251bdf..836e2ba 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1924,6 +1924,7 @@ python-value.o: $(srcdir)/python/python-value.c
PY_FILES = gdb/FrameIterator.py gdb/command/alias.py \
gdb/command/backtrace.py gdb/command/require.py \
gdb/command/pahole.py gdb/command/__init__.py \
+ gdb/command/ignore_errors.py gdb/command/save_breakpoints.py \
gdb/libstdcxx/v6/printers.py gdb/libstdcxx/v6/__init__.py \
gdb/libstdcxx/__init__.py gdb/function/caller_is.py \
gdb/function/in_scope.py gdb/function/__init__.py gdb/backtrace.py \
diff --git a/gdb/python/lib/gdb/command/ignore_errors.py b/gdb/python/lib/gdb/command/ignore_errors.py
new file mode 100644
index 0000000..6fa48ff
--- /dev/null
+++ b/gdb/python/lib/gdb/command/ignore_errors.py
@@ -0,0 +1,37 @@
+# Ignore errors in user commands.
+
+# Copyright (C) 2008 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+
+class IgnoreErrorsCommand (gdb.Command):
+ """Execute a single command, ignoring all errors.
+Only one-line commands are supported.
+This is primarily useful in scripts."""
+
+ def __init__ (self):
+ super (IgnoreErrorsCommand, self).__init__ ("ignore-errors",
+ gdb.COMMAND_OBSCURE,
+ # FIXME...
+ gdb.COMPLETE_COMMAND)
+
+ def invoke (self, arg, from_tty):
+ try:
+ gdb.execute (arg, from_tty)
+ except:
+ pass
+
+IgnoreErrorsCommand ()
diff --git a/gdb/python/lib/gdb/command/save_breakpoints.py b/gdb/python/lib/gdb/command/save_breakpoints.py
new file mode 100644
index 0000000..ce0f2e5
--- /dev/null
+++ b/gdb/python/lib/gdb/command/save_breakpoints.py
@@ -0,0 +1,64 @@
+# Save breakpoints.
+
+# Copyright (C) 2008 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import with_statement
+import gdb
+
+class SavePrefixCommand (gdb.Command):
+ "Prefix command for saving things."
+
+ def __init__ (self):
+ super (SavePrefixCommand, self).__init__ ("save",
+ gdb.COMMAND_SUPPORT,
+ gdb.COMPLETE_NONE, True)
+
+class SaveBreakpointsCommand (gdb.Command):
+ """Save the current breakpoints to a file.
+This command takes a single argument, a file name.
+The breakpoints can be restored using the 'source' command."""
+
+ def __init__ (self):
+ super (SaveBreakpointsCommand, self).__init__ ("save breakpoints",
+ gdb.COMMAND_SUPPORT,
+ gdb.COMPLETE_FILENAME)
+
+ def invoke (self, arg, from_tty):
+ bps = gdb.get_breakpoints ()
+ if bps is None:
+ raise RuntimeError, 'No breakpoints to save'
+ with open (arg.strip (), 'w') as f:
+ for bp in bps:
+ print >> f, "break", bp.get_location (),
+ if bp.get_thread () is not None:
+ print >> f, " thread", bp.get_thread (),
+ if bp.get_condition () is not None:
+ print >> f, " if", bp.get_condition (),
+ print >> f
+ if not bp.is_enabled ():
+ print >> f, "disable $bpnum"
+ # Note: we don't save the ignore count; there doesn't
+ # seem to be much point.
+ commands = bp.get_commands ()
+ if commands is not None:
+ print >> f, "commands"
+ # Note that COMMANDS has a trailing newline.
+ print >> f, commands,
+ print >> f, "end"
+ print >> f
+
+SavePrefixCommand ()
+SaveBreakpointsCommand ()