从C程序到gdb的命令

时间:2011-09-11 20:35:17

标签: c gdb

我是UNIX程序的新手。我遇到过一种情况,我必须从我的C程序向gdb发出命令。我有一个C程序,它通过分配一个新的子进程来调用另一个C程序。我需要调试这个子C程序,因此,我使用系统命令在这个C程序上调用gdb进程。但是我得到了一个我不想要的gdb提示符。我想从我的父C程序向gdb发出命令。有没有办法从C程序向gdb发出命令?

请回复。

非常感谢。

Esash

3 个答案:

答案 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