如果我正在使用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
答案 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.html 和https://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html#Hooks
您可以根据需要添加任意数量的挂钩/定义。
答案 1 :(得分:1)
部分相关:我将它放在〜/ .gdbinit中,并在使用c
和n
后成功刷新了TUI,这是通常导致我的情况下TUI崩溃的命令。>
define c
continue
refresh
end
define n
next
refresh
end