使用带有管道输入的gdb而不创建文件

使用带有管道输入的gdb而不创建文件,gdb,Gdb,我有一个接收管道输入的程序: bash> echo "something" | ./program 'seomthingelse' 在不创建新文件的情况下,如何将此输入重定向到gdb 在不创建新文件的情况下,如何将此输入重定向到gdb 您可以创建一个命名管道(不确定这是否算作“新文件”——为什么要避免使用新文件?) 您可以将延迟放入程序中,用echo“something”|/程序“seomthingelse”启动它,并在它仍处于延迟状态时从另一个窗口附加到它 第二种解决方案通常对那些

我有一个接收管道输入的程序:

bash> echo "something" | ./program 'seomthingelse'
在不创建新文件的情况下,如何将此输入重定向到gdb

在不创建新文件的情况下,如何将此输入重定向到gdb

  • 您可以创建一个命名管道(不确定这是否算作“新文件”——为什么要避免使用新文件?)
  • 您可以将延迟放入程序中,用
    echo“something”|/程序“seomthingelse”
    启动它,并在它仍处于延迟状态时从另一个窗口附加到它
第二种解决方案通常对那些特别关注如何调用它们的程序非常有用,我发现以下实现工作得很好:

int main(int argc, char *argv[])
{
  if (getenv("WAIT_FOR_GDB") != NULL) {
    int done = 0;
    while (!done) sleep(1);
  }
  /* rest of main */
}

然后在环境中设置
WAIT\u FOR\u GDB
,并可以花费任意时间附加进程。连接后,从
sleep
开始执行
up
set var done=1
,设置所需的任何其他断点,然后
继续
,您可以使用
gdbserver
执行此操作。stdin将对目标程序可用,未经修改

在一个终端会话中:

bash> echo "something" | gdbserver ./program 'seomthingelse'
Process ./program created; pid = 1591
Listening on port 1234
bash> gdb ./program
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
Loaded symbols for /lib/ld-linux.so.2
0x48611020 in _start () from /lib/ld-linux.so.2
(gdb)
此时,
/program
刚启动就已暂停

在另一个终端会话中:

bash> echo "something" | gdbserver ./program 'seomthingelse'
Process ./program created; pid = 1591
Listening on port 1234
bash> gdb ./program
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
Loaded symbols for /lib/ld-linux.so.2
0x48611020 in _start () from /lib/ld-linux.so.2
(gdb)
gdbserver
可能位于发行版的
gdb
软件包中,或者您可能需要安装另一个软件包。在Fedora上,它是
gdbgdbserver