我想在Screen虚拟终端中运行gdb(GNU调试器)并在相邻的Screen视图上实时grep输出。
我如何实施这项安排?普通管道只是重定向输出。我也很好奇如何将屏幕视图(^ A + c)绑定到IO的现有流程。
编辑:
我提出了以下解决方案。使用 mkfifo pipe 创建命名管道并执行 gdb program | pty1 中的T恤管道 。这会将输出复制到管道。在 pty2 中,我执行了 less -f pipe | grep foo 打印感兴趣的行。
我确信必须有更简单的方法来完成这么简单的任务。
EDIT2:
上面提到的方法似乎有些错误。除非实际从FIFO中读取内容,否则Gdb不会向其控制台打印任何内容。这是为什么?此外,当我使用我自己的程序尝试此方法时,只需将printf HelloForld打印到stdout,两个视图中都不会打印任何内容。
EDIT3:
我发现,如果没有人真正从管道中读取,Tee就会故意阻止。同步的问题。我仍然想知道,原来的程序如何能够从键盘读取输入,即使Tee控制现在的终端窗口。或者是终端输入转到原始程序的stdin并输出到Tee的stdout?
答案 0 :(得分:0)
你不必从double Value=i/60000;
String s = (new DecimalFormat("##.#").format(Value));
开始你的程序。只需在一个屏幕窗格中启动它,然后确定gdb
(使用pid
,top
,pgrep
)。
在另一个窗格中,您启动ps
会话:
gdb
这样你就有了一个控制gdb的终端和一个使用你正在调试的程序的终端,它们都有自己的输入和输出。
唯一的条件是程序运行的时间足以让您将调试器附加到进程。一种简单的方法是让它在开始时等待输入。您也可以将其打印为gdb <path_to_program> <pid>
。