如何在tui模式下自动刷新gdb?

时间:2016-08-06 11:31:06

标签: python linux gdb gnu-screen tui

如果我正在使用gdb -tui调试文件,则源窗口总是变得混乱。所以每当我点击输入,我必须立即输入 ctrl + L 来摆脱这个问题,这就是gdb刷新窗口。我正在使用gnu屏幕进行tty。

是否有可能在tui模式下自动刷新gdb?
如果gdb没有这种能力,Python可能是一个解决方案,因为gdb能够获取Python文件,但我不了解Python。

这个Python代码段可以在Bash中正常工作,但不能在gdb中工作:

import sys
r = "\033[2J"    # here I try to emulate [ctrl-L]
t = ""
while 1:
    i = sys.stdin.read(1)
    t = t +i
    if i == '\n':
        print(r)

当然我接受gdb支持的所有其他语言 感谢每一位帮助。

顺便说一句,这是一个显示我问题的截屏视频https://youtu.be/DqiH6Jym1JY

这是我用于在gdb中演示的文件,如上面显示的链接,mess_up.c

#include <stdio.h>

int main(void){
    //int n = 120;
    int n;
    n = 120;
    char stuff[n+2];

    printf( "Max: %d\n", n );

    printf( "Sizeof int:  %d\n", sizeof(int)  );
    printf( "Sizeof char: %d\n", sizeof(char) );
    printf( "Sizeof n:  %d\n", sizeof n   );
    printf( "Sizeof stuff: %d\n", sizeof stuff  );

    fgets ( stuff , n , stdin );
    printf( "The stuff:\n%s\n", stuff );
    printf( "Sizeof stuff after input = %d\n", sizeof stuff  );

return 0;
}

tic -V显示的实际ncurses版本为ncurses 5.9.20140118

2 个答案:

答案 0 :(得分:5)

有完全相同的问题。 您是否尝试过GDB用户定义的挂钩或命令?

在你的〜/ .gdbinit或你的会话中,你可以这样做:

define hook-next
  refresh
end

每次输入refresh命令或其中一个别名时,都会调用next命令。

或者您可以定义:

define mynext
  next
  refresh
end

并致电mynext而非next

只要输入命令C并且存在hook-C,就会自动调用挂钩,这很酷,我只是在文档中发现了。

参见https://sourceware.org/gdb/current/onlinedocs/gdb/Define.htmlhttps://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html#Hooks

您可以根据需要添加任意数量的挂钩/定义。

答案 1 :(得分:1)

部分相关:我将它放在〜/ .gdbinit中,并在使用cn后成功刷新了TUI,这是通常导致我的情况下TUI崩溃的命令。

define c 
  continue
  refresh
end

define n
  next
  refresh
end