假设我有两个名为blah and ret。我想调试blah接收输入的程序ret通过 I/O 重定向进行编程。我该如何调试blah在以下情况下使用 gdb 进行编程?
bash> ret | blah
首先,您可以运行程序并通过pid进行调试。当然,这个解决方案并不能涵盖所有情况。
另一种方法是使用 Linux 功能进行进程间通信。简而言之,您重定向了输出ret
到 FIFO 特殊文件(“命名管道”),然后通过调试器从该 FIFO 读取。这是如何完成的。从 bash 运行:
mkfifo foo
这会在您的目录中创建一个特殊文件,该文件将用作命名管道。当您将文本写入此文件时(使用相同的语法echo "Hello" >foo
),写入程序将阻塞,直到有人从文件中读取数据(cat <foo
, 例如)。在我们的例子中,gdb 控制的进程将从该文件中读取。
创建 fifo 后,从 bash 运行:
ret > foo & # ampersand because it may block as nobody is reading from foo
gdb blah
然后,在 gdb 提示符下运行
run <foo
并得到想要的效果。请注意,您不能从 fifo(以及从普通管道)读取数据两次:当您读取完所有数据后,blah
进程终止,您应该重复写入 foo 的命令(您可以从另一个 shell 窗口执行此操作)。
完成后,删除 fiform foo
(或者放到系统重启后自动删除的目录下,如/tmp
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)