diff mbox

[RFA] PR gdb/16483 - simplify "info frame-filters" output

Message ID 1466440248-1748-1-git-send-email-tom@tromey.com
State New
Headers show

Commit Message

Tom Tromey June 20, 2016, 4:30 p.m. UTC
PR gdb/16483 notes that the output of "info frame-filters" is quite
voluminous.  In particular it prints an entry for each objfile, even if
only to say that the objfile does not have any associated frame filters.

I think it's better to only print output when there is a frame filter.
There's nothing worth doing with the no-frame-filter information, and
limiting the output makes it much more readable.

Built and regtested on x86-64 Fedora 23.

2016-06-20  Tom Tromey  <tom@tromey.com>

	PR gdb/16483:
	* python/lib/gdb/command/frame_filters.py
	(InfoFrameFilter.list_frame_filters): Rename to print_list.  Print
	nothing if no filters found.  Return value indicating whether
	filters were printed.
	(InfoFrameFilter.print_list): Remove.
	(InfoFrameFilter.invoke): Print message if no frame filters
	found.

2016-06-20  Tom Tromey  <tom@tromey.com>

	PR gdb/16483:
	* gdb.python/py-framefilter.exp: Add "info frame-filter" test
	before any filters are loaded.
---
 gdb/ChangeLog                               | 11 ++++++
 gdb/python/lib/gdb/command/frame_filters.py | 56 +++++++++++++----------------
 gdb/testsuite/ChangeLog                     |  6 ++++
 gdb/testsuite/gdb.python/py-framefilter.exp |  4 +++
 4 files changed, 45 insertions(+), 32 deletions(-)

Comments

Pedro Alves June 23, 2016, 1:42 p.m. UTC | #1
On 06/20/2016 05:30 PM, Tom Tromey wrote:
> PR gdb/16483 notes that the output of "info frame-filters" is quite
> voluminous.  In particular it prints an entry for each objfile, even if
> only to say that the objfile does not have any associated frame filters.
> 
> I think it's better to only print output when there is a frame filter.
> There's nothing worth doing with the no-frame-filter information, and
> limiting the output makes it much more readable.
> 

I agree.  LGTM.

Thanks,
Pedro Alves
diff mbox

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index faa9e9f..5977527 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,14 @@ 
+2016-06-20  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/16483:
+	* python/lib/gdb/command/frame_filters.py
+	(InfoFrameFilter.list_frame_filters): Rename to print_list.  Print
+	nothing if no filters found.  Return value indicating whether
+	filters were printed.
+	(InfoFrameFilter.print_list): Remove.
+	(InfoFrameFilter.invoke): Print message if no frame filters
+	found.
+
 2016-06-17  Yan-Ting Lin  <currygt52@gmail.com>
 
 	* Makefile.in (ALL_TARGET_OBS): Add nds32-tdep.o.
diff --git a/gdb/python/lib/gdb/command/frame_filters.py b/gdb/python/lib/gdb/command/frame_filters.py
index c9d4f3e..a5fb0a6 100644
--- a/gdb/python/lib/gdb/command/frame_filters.py
+++ b/gdb/python/lib/gdb/command/frame_filters.py
@@ -56,52 +56,44 @@  class InfoFrameFilter(gdb.Command):
         else:
             return "No"
 
-    def list_frame_filters(self, frame_filters):
-        """ Internal worker function to list and print frame filters
-        in a dictionary.
-
-        Arguments:
-           frame_filters: The name of the dictionary, as
-           specified by GDB user commands.
-        """
-
+    def print_list(self, title, frame_filters, blank_line):
         sorted_frame_filters = sorted(frame_filters.items(),
                                       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))
-
-    def print_list(self, title, filter_list, blank_line):
+            return 0
+
         print(title)
-        self.list_frame_filters(filter_list)
+        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])))
+                print("  %s  %s  %s" % (priority, enabled, name))
+            except Exception:
+                e = sys.exc_info()[1]
+                print("  Error printing filter '"+name+"': "+str(e))
         if blank_line:
             print("")
+        return 1
 
     def invoke(self, arg, from_tty):
-        self.print_list("global frame-filters:", gdb.frame_filters, True)
+        any_printed = self.print_list("global frame-filters:", gdb.frame_filters, True)
 
         cp = gdb.current_progspace()
-        self.print_list("progspace %s frame-filters:" % cp.filename,
-                        cp.frame_filters, True)
+        any_printed += self.print_list("progspace %s frame-filters:" % cp.filename,
+                                       cp.frame_filters, True)
 
         for objfile in gdb.objfiles():
-            self.print_list("objfile %s frame-filters:" % objfile.filename,
-                            objfile.frame_filters, False)
+            any_printed += self.print_list("objfile %s frame-filters:" % objfile.filename,
+                                           objfile.frame_filters, False)
+
+        if any_printed == 0:
+            print ("No frame filters.")
 
 # Internal enable/disable functions.
 
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index e5f1c54..2538ecf 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@ 
+2016-06-20  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/16483:
+	* gdb.python/py-framefilter.exp: Add "info frame-filter" test
+	before any filters are loaded.
+
 2016-06-17  Sanjoy Das  <sanjoy@playingwithpointers.com>
 
 	* gdb.base/jit-reader.exp: New file.
diff --git a/gdb/testsuite/gdb.python/py-framefilter.exp b/gdb/testsuite/gdb.python/py-framefilter.exp
index aea4b45..61afa2f 100644
--- a/gdb/testsuite/gdb.python/py-framefilter.exp
+++ b/gdb/testsuite/gdb.python/py-framefilter.exp
@@ -33,6 +33,10 @@  gdb_start
 # Skip all tests if Python scripting is not enabled.
 if { [skip_python_tests] } { continue }
 
+gdb_test "info frame-filter" \
+    "No frame filters\\." \
+    "info frame filter before loading filters"
+
 # Make the -gdb.py script available to gdb, it is automagically loaded by gdb.
 # Care is taken to put it in the same directory as the binary so that
 # gdb will find it.