用于在Linux上控制输出的有control-s和control-t,它们提供了一种临时停止终端输出然后恢复输出的方法。在VMS上,另外还有control-O,它可以打开和关闭所有输出。这并没有暂停输出,而是将其丢弃。
在Linux中有没有等效的键盘快捷键?
在gdb中,这是我在调试输出数百万个状态行的程序时最常遇到的问题。如果能够暂时将大部分内容发送到/dev/null而不是屏幕,然后在两个屏幕之间省去两百万行代码,然后再继续输出流,这将非常方便。
(编辑: termios(3)手册页提到了VDISCARD -然后又说它在POSIX或Linux上不能工作。因此,对于linux上的一般命令行使用,这看起来是不可能的。不过,gdb仍然可以通过它自己的命令之一丢弃输出。可以吗?)
谢谢。
发布于 2016-08-04 12:49:30
虚拟机上的
另外还有control-O ...
这个功能似乎并不存在于我接触过的任何UNIX系统上(或者我只是从来不知道它的存在;它在FreeBSD man page等文档中有说明,在Solaris和HP-UX文档中也有引用)。
不过,
gdb仍然可以通过它自己的命令之一丢弃输出。可以吗?
我不这样认为: GDB实际上并不截获来自次等(被调试)进程的输出,它只是让它运行(在断点之间),并将次等输出带到它要去的任何地方。
也就是说,你可以自己做:
#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);输出已恢复!
https://stackoverflow.com/questions/38730133
复制相似问题