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 -V是ncurses 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)
有完全相同的问题。您是否尝试过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.html 和https://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html#Hooks
您可以根据需要添加任意数量的钩子/定义。