我是UNIX程序的新手。我遇到过一种情况,我必须从我的C程序向gdb发出命令。我有一个C程序,它通过分配一个新的子进程来调用另一个C程序。我需要调试这个子C程序,因此,我使用系统命令在这个C程序上调用gdb进程。但是我得到了一个我不想要的gdb提示符。我想从我的父C程序向gdb发出命令。有没有办法从C程序向gdb发出命令?
请回复。
非常感谢。
Esash
答案 0 :(得分:4)
如果需要调试子进程,则在fork + exec时不一定需要使用GDB调用子进程。只要您拥有子进程的PID,就可以使用GDB中的“attach”命令附加到正在运行的子进程。基本上,你可以启动GDB,如:
$ gdb
(gdb) attach pid-of-child
在上面,将 pid-of-child 替换为子进程的PID,然后你可以从交互式GDB调试子进程,而不需要父进程处理与GDB一起。
答案 1 :(得分:3)
有几种方法可以通过编程方式“驱动”GDB。
如果您只想发出一个命令,例如为了找出孩子崩溃的原因,你可以这样做:
gdb --batch -ex where /path/to/child <pid-of-child>
如果有更多命令,那么您愿意使用命令行,您可以将它们写入临时文件,并要求gdb执行它们:
gdb --batch -x /path/to/commandfile /path/to/child <pid-of-child>
上述任何一项都不允许您执行程序化(if ... then do-something-in-gdb else do-something-else-in-gdb
)控制。
为此你可能想要运用GDB的machine interface(MI),或使用embedded Python interpreter。
答案 2 :(得分:0)
还有以下的fork gdb选项。这将立即附加到子进程。
设置跟随模式
所以,
设置follow-fork-mode child