This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch][python] PR python/16483 (info frame-filters is too verbose)


This patch shortens the output length of "info frame-filters".  The
command was previously printing out each object file with either the
filters registered, or a message per object file indicating it could
not find filters.  With inferiors with many object files this is
very verbose.  The new patch modifies the behavior to only mention
object files, program spaces the global filter lists if there are
filters registered.  If there are no filters found at all, only then
will it print a single warning indicating so.

OK?

Cheers,

Phil

--

2014-02-21  Phil Muldoon  <pmuldoon@redhat.com>

    PR python/16483
    * python/lib/gdb/command/frame_filters.py
    (InfoFrameFilter.__init__): Add total_filters and print_empty
    declarations.
    (InfoFrameFilter.list_frame_filters): Do not test if filter list
    is empty.  Keep a count of total filters printed.
    (InfoFrameFilter.print_list): Test if filters list is empty and if
    empty frame filter lists are permitted to be printed.
    (InfoFrameFilter.invoke): Test number of frame filters printed.
    If none have been printed at exit, print a message indicating
    that.

2014-02-21  Phil Muldoon  <pmuldoon@redhat.com>

    * gdb.python/py-framefilter.exp: Add test for "info frame-filters"
    where no frame filters are registered.

--

diff --git a/gdb/python/lib/gdb/command/frame_filters.py b/gdb/python/lib/gdb/command/frame_filters.py
index 450c5bf..7165c4f 100644
--- a/gdb/python/lib/gdb/command/frame_filters.py
+++ b/gdb/python/lib/gdb/command/frame_filters.py
@@ -48,6 +48,9 @@ class InfoFrameFilter(gdb.Command):
     def __init__(self):
         super(InfoFrameFilter, self).__init__("info frame-filter",
                                               gdb.COMMAND_DATA)
+        self.print_empty = False
+        self.total_filters = 0
+
     @staticmethod
     def enabled_string(state):
         """Return "Yes" if filter is enabled, otherwise "No"."""
@@ -69,24 +72,26 @@ class InfoFrameFilter(gdb.Command):
                                       key=lambda i: gdb.frames.get_priority(i[1]),
                                       reverse=True)
 
-        if len(sorted_frame_filters) == 0:
-            print("  No frame filters registered.")
-        else:
-            print("  Priority  Enabled  Name")
-            for frame_filter in sorted_frame_filters:
-                name = frame_filter[0]
-                try:
-                    priority = '{:<8}'.format(
-                        str(gdb.frames.get_priority(frame_filter[1])))
-                    enabled = '{:<7}'.format(
-                        self.enabled_string(gdb.frames.get_enabled(frame_filter[1])))
-                except Exception:
-                    e = sys.exc_info()[1]
-                    print("  Error printing filter '"+name+"': "+str(e))
-                else:
-                    print("  %s  %s  %s" % (priority, enabled, name))
+        self.total_filters = self.total_filters + len(sorted_frame_filters)
+        print("  Priority  Enabled  Name")
+        for frame_filter in sorted_frame_filters:
+            name = frame_filter[0]
+            try:
+                priority = '{:<8}'.format(
+                    str(gdb.frames.get_priority(frame_filter[1])))
+                enabled = '{:<7}'.format(
+                    self.enabled_string(gdb.frames.get_enabled(frame_filter[1])))
+            except Exception:
+                e = sys.exc_info()[1]
+                print("  Error printing filter '"+name+"': "+str(e))
+            else:
+                print("  %s  %s  %s" % (priority, enabled, name))
 
     def print_list(self, title, filter_list, blank_line):
+
+        if len(filter_list) <= 0 and self.print_empty == False:
+            return
+
         print(title)
         self.list_frame_filters(filter_list)
         if blank_line:
@@ -103,6 +108,9 @@ class InfoFrameFilter(gdb.Command):
             self.print_list("objfile %s frame-filters:" % objfile.filename,
                             objfile.frame_filters, False)
 
+        if self.total_filters == 0:
+            print(" No frame-filters found.")
+
 # Internal enable/disable functions.
 
 def _enable_parse_arg(cmd_name, arg):
diff --git a/gdb/testsuite/gdb.python/py-framefilter.exp b/gdb/testsuite/gdb.python/py-framefilter.exp
index 948ae94..1872d7a 100644
--- a/gdb/testsuite/gdb.python/py-framefilter.exp
+++ b/gdb/testsuite/gdb.python/py-framefilter.exp
@@ -44,6 +44,9 @@ set remote_obj_python_file \
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_test_no_output "set auto-load safe-path ${remote_obj_python_file}" \
     "set auto-load safe-path"
+gdb_test "info frame-filter" \
+    " No frame-filters found." \
+    "info frame filter with no filters loaded."
 gdb_load ${binfile}
 # Verify gdb loaded the script.
 gdb_test "info auto-load python-scripts" "Yes.*/${testfile}-gdb.py.*" \
    


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]