为了控制Linux上的输出,有control-s和control-t,它提供了一种暂时停止终端输出然后恢复它的方法。此外,在VMS上还有control-O,可以打开和关闭所有输出。这没有暂停输出,它丢弃了它。
Linux中是否有等效的键盘快捷键?
当调试输出数百万个状态行的程序时,这在gdb中经常出现。能够暂时将大部分内容发送到/ dev / null而不是屏幕,然后进一步接收输出流,在它们之间省去几百万行是非常方便的。
(编辑:termios(3)手册页提到VDISCARD - 然后说它不能在POSIX或Linux中工作。所以看起来这对于一般命令行使用来说是不可能的linux .gdb可能仍然可以通过它自己的命令丢弃输出。可以吗?)
感谢。
答案 0 :(得分:0)
在VMS上还有控制-O ......
这个功能似乎并不存在于我曾经处理过的任何UNIX系统上(或者我可能从来不知道它存在;它已在FreeBSD man page中记录,并且也被Solaris和HP-UX文档引用。
gdb可能仍然能够通过其自己的命令丢弃输出。可以吗?
我不相信:GDB实际上并没有拦截来自劣质(正在调试)过程的输出,它只是让它运行(在断点之间),劣质输出转到它的任何地方&#39去吧。
那就是说,你可以自己做:
#include <stdio.h>
int main()
{
int i;
for (i = 0; i < 1000; ++i) {
printf("%d\n", i);
}
}
gcc -g foo.c
gdb -q ./a.out
(gdb) break 6
Breakpoint 1 at 0x40053e: file foo.c, line 6.
(gdb) run 20>/dev/null # run the program, file descriptor 20 goes to /dev/null
Starting program: /tmp/a.out 20>/dev/null
Breakpoint 1, main () at foo.c:6
6 printf("%d\n", i);
(gdb) c
Continuing.
0
Breakpoint 1, main () at foo.c:6
6 printf("%d\n", i);
我们现在运行两次迭代。让我们阻止100次迭代的进一步输出:
(gdb) call dup2(20, 1)
$1 = 1
(gdb) ign 1 100
Will ignore next 100 crossings of breakpoint 1.
(gdb) c
Continuing.
Breakpoint 1, main () at foo.c:6
6 printf("%d\n", i);
(gdb) p i
$2 = 102
根据需要无输出。现在让我们恢复输出:
(gdb) call dup2(2, 1)
$3 = 1
(gdb) ign 1 10
Will ignore next 10 crossings of breakpoint 1.
(gdb) c
Continuing.
102
103
104
105
106
107
108
109
110
111
112
Breakpoint 1, main () at foo.c:6
6 printf("%d\n", i);
输出已恢复!