使用gdb调试一个从标准输入读取输入的交互式程序

7
我正在使用C编写一个客户端/服务器程序。
我的客户端有一个线程从stdin读取输入,它只是一个while(1)循环来读取来自stdin的输入。每当它读取一行时,它将其传递给另一个处理消息解析和分帧的线程。
当我进入gdb时,命令行被gdb提示占用,我不能再向stdin输入行了。
有没有办法解决这个问题?(我不想将stdin重定向到输入文件,因为我已经尝试过这种方法,但它没有起作用)
3个回答

10
在一个终端中运行您的程序,并从另一个终端附加到它。
要附加到正在运行的程序,请找到要附加到的程序的进程ID(PID),然后执行 >。

如何将进程附加到gdb? - zanyman

1
作为Jonathan Reinhart答案的补充,这里是一个一行代码,可以通过名称附加到正在运行的程序:
gdb -p $(pgrep <executable-name>)

0

澄清一下,如果您知道程序的进程ID,则不需要可执行文件名。这将允许您直接附加程序。

gdb -p PID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接