gpt4 book ai didi

linux - GDB:暂时重定向目标标准输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:10 27 4
gpt4 key购买 nike

当我启动 GDB 时,目标进程会打印大量数据,因此我想在某个时间点之前将其重定向到 NULL。

目前我发现的仅有的两种方法是:

  1. 运行 > 文件名

  2. tty 文件名

问题是我无法找到将劣质标准输出恢复正常的方法。

没有“默认tty”或“默认tty”

谢谢,

义泰

最佳答案

i cannot find a way to restore the stdout of the inferior back to normal

这里是你如何做到的:

Reading symbols from /tmp/./a.out...done.
(gdb) list main
1 #include <stdio.h>
2
3 int main() {
4 int i;
5
6 for (i = 0; i < 1000; ++i) {
7 printf("A line we don't care about: %d\n", i);
8 }
9 printf("An important line\n");
10 return 0;
11 }
(gdb) b 9
Breakpoint 1 at 0x400579: file t.c, line 9.
(gdb) run > /dev/null
Starting program: /tmp/./a.out > /dev/null

Breakpoint 1, main () at t.c:9
9 printf("An important line\n");
(gdb) call fflush(0)
$1 = 0

由于我们即将切换输出,因此我们要确保刷新所有缓冲数据。

接下来我们调用open("/dev/tty", O_WRONLY)。您可以在 /usr/include 中通过 grepping 找到 O_WRONLY 的值。

(gdb) shell grep WRONLY /usr/include/bits/*.h
/usr/include/bits/fcntl.h:#define O_WRONLY 01
(gdb) p open("/dev/tty", 1)
$2 = 3

所以我们现在有一个新的文件描述符 3,它将输出到当前终端。最后,我们将 STDOUT_FILENO 切换到它,如下所示:

(gdb) call dup2(3, 1)
$3 = 1
(gdb) c
Continuing.
An important line
[Inferior 1 (process 22625) exited normally]

瞧:“一条重要的线”被打印到终端。

关于linux - GDB:暂时重定向目标标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20860478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com