我正在使用gdb
。
我通过将输入发送到stdin:
来运行如下命令来设置程序 r < <(python -c "print '1\n2\n3'")
我希望该命令允许我在完成后开始输入输入(因此我可以正常与debugee交互)而不是stdin被关闭。
这可以在bash中运行,但是你不能以这种方式管道到gdb r
命令:
cat <(python -c "print '1\n2\n3'") - | r
以下不起作用,我假设它在将EOF发送到程序之前等待EOF。
r < <(cat <(python -c "print '1\n2\n3'") -)
是否有第三种选择可行?
答案 0 :(得分:2)
这听起来像是expect的工作。
鉴于
#include <stdio.h>
int main()
{
char *cp = NULL;
size_t n = 0;
while(getline(&cp, &n, stdin) >= 0) {
fprintf(stderr, "got: %s", cp);
}
return 0;
}
gcc -g -Wall t.c
这个期望脚本:
#!/usr/bin/expect
spawn gdb -q ./a.out
send run\n
send 1\n2\n3\n
interact
这是会议:
$ ./t.exp
spawn gdb -q ./a.out
run
1
2
3
Reading symbols from ./a.out...done.
(gdb) run
Starting program: /tmp/a.out
got: 1
got: 2
got: 3
现在脚本正在等待我的输入。我提供了一些:
foo bar baz
got: foo bar baz
我也可以与GDB互动:
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b006b0 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) bt
#0 0x00007ffff7b006b0 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x00007ffff7a8f5a0 in _IO_new_file_underflow (fp=0x7ffff7dd4640 <_IO_2_1_stdin_>) at fileops.c:613
#2 0x00007ffff7a840d5 in _IO_getdelim (lineptr=0x7fffffffdda0, n=0x7fffffffdda8, delimiter=10, fp=0x7ffff7dd4640 <_IO_2_1_stdin_>) at iogetdelim.c:77
#3 0x000000000040064e in main () at t.c:9