gpt4 book ai didi

c - gdb - 使用管道调试

转载 作者:太空狗 更新时间:2023-10-29 16:20:37 25 4
gpt4 key购买 nike

假设我有两个名为blahret 的程序。我想调试通过 I/O 重定向从 ret 程序接收输入的 blah 程序。在以下情况下如何使用 gdb 调试 blah 程序?

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 窗口执行此操作)。

完成后,使用 rm foo 移除 fifo (或者放在系统重启时自动删除的目录,例如 /tmp )。

关于c - gdb - 使用管道调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456253/

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