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

Joh*_*ofy 13 python linux gdb tui gnu-screen

如果我使用gdb -tui源窗口调试文件总是搞砸了.因此,每次我点击enter我必须立即键入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)
Run Code Online (Sandbox Code Playgroud)

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

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

这是我用于在gdb中演示的文件,如show's,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;
}
Run Code Online (Sandbox Code Playgroud)

我显示的实际ncurses版本tic -Vncurses 5.9.20140118

小智 10

部分相关:我将其放入 ~/.gdbinit 中,在我使用c和后n,它成功刷新了 TUI,在我的情况下,这些命令通常会导致 TUI 崩溃。

define c 
  continue
  refresh
end

define n
  next
  refresh
end
Run Code Online (Sandbox Code Playgroud)


hdl*_*hdl 6

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

在〜/ .gdbinit或会话中,您可以执行以下操作:

define hook-next
  refresh
end
Run Code Online (Sandbox Code Playgroud)

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

或者您可以定义:

define mynext
  next
  refresh
end
Run Code Online (Sandbox Code Playgroud)

然后呼叫mynext而不是next

每当输入命令C并且存在钩子C时,都会自动调用钩子,这很酷,我刚刚在文档中发现了这一点。

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

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

  • gdb 默认情况下不刷新自身是否有任何原因? (5认同)