[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