[PATCH 08/22] Implement frames TUI window

Hannes Domani ssbssa@yahoo.de
Sat Mar 6 17:34:03 GMT 2021


---
 gdb/python/lib/gdb/command/tui_windows.py | 53 +++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/gdb/python/lib/gdb/command/tui_windows.py b/gdb/python/lib/gdb/command/tui_windows.py
index c0699958782..3572d2e3312 100644
--- a/gdb/python/lib/gdb/command/tui_windows.py
+++ b/gdb/python/lib/gdb/command/tui_windows.py
@@ -657,9 +657,48 @@ class ThreadsWindow(TextWindow):
             var_change_handler()
 
 
+class FramesWindow(TextWindow):
+    def __init__(self, win):
+        super(FramesWindow, self).__init__(win, "frames")
+
+    def refill(self):
+        if not self.win.is_valid():
+            return
+        self.lines = []
+        self.frames = []
+        thread = gdb.selected_thread()
+        thread_valid = thread and thread.is_valid()
+        if thread_valid:
+            frame = gdb.newest_frame()
+            selected = gdb.selected_frame()
+            num = 0
+            while frame:
+                name = frame.name()
+                if not name:
+                    name = format(frame.pc(), "#x")
+                else:
+                    name = filter_templates(name)
+                num_str = "#%-2d " % num
+                name_col_s, name_col_e = "", ""
+                if frame == selected:
+                    name_col_s, name_col_e = "\033[1;37m", "\033[0m"
+                self.lines.append(num_str + name_col_s + name + name_col_e)
+                self.frames.append(frame)
+                frame = frame.older()
+                num += 1
+        self.redraw()
+
+    def click(self, x, y, button):
+        line = y + self.line_ofs
+        if button == 1 and line < len(self.frames):
+            self.frames[line].select()
+            var_change_handler()
+
+
 gdb.register_window_type("locals", LocalsWindow)
 gdb.register_window_type("display", DisplayWindow)
 gdb.register_window_type("threads", ThreadsWindow)
+gdb.register_window_type("frames", FramesWindow)
 
 
 def var_change_handler(event=None):
@@ -674,8 +713,22 @@ gdb.execute("tui new-layout locals {-horizontal src 2 locals 1} 2 status 0 cmd 1
 gdb.execute("tui new-layout display {-horizontal src 2 display 1} 2 status 0 cmd 1")
 gdb.execute("tui new-layout locals-display {-horizontal src 2 {locals 1 display 1} 1} 2 status 0 cmd 1")
 gdb.execute("tui new-layout threads {-horizontal src 2 threads 1} 2 status 0 cmd 1")
+gdb.execute("tui new-layout frames {-horizontal src 2 frames 1} 2 status 0 cmd 1")
+gdb.execute("tui new-layout threads-frames {-horizontal src 2 {threads 1 frames 1} 1} 2 status 0 cmd 1")
+gdb.execute("tui new-layout locals-frames {-horizontal src 2 {locals 2 frames 1} 1} 2 status 0 cmd 1")
+gdb.execute("tui new-layout display-frames {-horizontal src 2 {display 2 frames 1} 1} 2 status 0 cmd 1")
+gdb.execute("tui new-layout locals-display-frames {-horizontal src 2 {locals 2 display 2 frames 1} 1} 3 status 0 cmd 1")
+gdb.execute("tui new-layout threads-locals-frames-display {-horizontal src 3 {threads 1 locals 2} 1 {frames 1 display 2} 1} 3 status 0 cmd 1")
+gdb.execute("tui new-layout all {-horizontal {{-horizontal asm 1 regs 1} 1 src 2} 3 {threads 1 locals 2} 1 {frames 1 display 2} 1} 3 status 0 cmd 1")
 
 gdb.execute("alias ll = layout locals")
 gdb.execute("alias ld = layout display")
 gdb.execute("alias lld = layout locals-display")
 gdb.execute("alias lt = layout threads")
+gdb.execute("alias lf = layout frames")
+gdb.execute("alias ltf = layout threads-frames")
+gdb.execute("alias llf = layout locals-frames")
+gdb.execute("alias ldf = layout display-frames")
+gdb.execute("alias lldf = layout locals-display-frames")
+gdb.execute("alias ltlfd = layout threads-locals-frames-display")
+gdb.execute("alias la = layout all")
-- 
2.30.1



More information about the Gdb-patches mailing list