使用gdb进行调试,程序从另一个程序获取输入

使用gdb进行调试,程序从另一个程序获取输入,gdb,Gdb,我需要调试一个以另一个程序的输出为源的程序。因此,将“feeder”的输出写入一个文件,并将其传输到“reader”是不起作用的 正常运行: # feeder | ./reader 这不是这里的选项: # feeder > data # gdb ./reader (gdb) run < data #馈线>数据 #gdb./reader (gdb)运行/tmp/.pipe gdb阅读器 (gdb)运行/tmp/.pipe gdb阅读器 (gdb)运行

我需要调试一个以另一个程序的输出为源的程序。因此,将“feeder”的输出写入一个文件,并将其传输到“reader”是不起作用的

正常运行:

# feeder | ./reader
这不是这里的选项:

# feeder > data
# gdb ./reader
(gdb) run < data
#馈线>数据
#gdb./reader
(gdb)运行<数据

您可以使
读卡器暂停并等待GDB连接,如前所述

然后运行:

feeder | ./reader
在一个终端中,
gdb-p$(pgrep阅读器)
在另一个终端中

一旦连接了gdb,让
读取器
继续,并正常调试它

更新:

现在您已经澄清了约束,另一种方法是使用命名管道:

mknod /tmp/.pipe p
feeder > /tmp/.pipe
gdb reader
(gdb) run < /tmp/.pipe
mknod/tmp/.p管道
给料机>/tmp/.pipe
gdb阅读器
(gdb)运行
您可以使
读卡器暂停并等待GDB连接,如前所述

然后运行:

feeder | ./reader
在一个终端中,
gdb-p$(pgrep阅读器)
在另一个终端中

一旦连接了gdb,让
读取器
继续,并正常调试它

更新:

现在您已经澄清了约束,另一种方法是使用命名管道:

mknod /tmp/.pipe p
feeder > /tmp/.pipe
gdb reader
(gdb) run < /tmp/.pipe
mknod/tmp/.p管道
给料机>/tmp/.pipe
gdb阅读器
(gdb)运行
为什么不选择它?因为进料器的输出不是连续的。从文件到文件的转储,从文件到管道将一次推送所有数据。不知道为什么向下投票…为什么它不是一个选项?因为馈线的输出不是连续的。转储到文件,从文件到管道将一次推送所有数据。不知道为什么向下投票…不是最优雅的方式,但一个良好的睡眠确实可以工作。@Bgs我认为您的问题没有指定,但您可以使用命名管道。答案已更新。这不是最优雅的方式,但一个良好的睡眠确实能起作用。@Bgs我认为你的问题没有明确说明,但你可以使用命名管道。答案已更新。