【问题标题】:commands to gdb from C program从 C 程序到 gdb 的命令
【发布时间】:2011-09-11 20:35:17
【问题描述】:

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

请回复。

非常感谢。

Esash

【问题讨论】:

    标签: c gdb


    【解决方案1】:

    如果你需要调试子进程,你fork+exec时不一定需要用GDB调用子进程。只要你有子进程的PID,就可以使用GDB中的“attach”命令附加到正在运行的子进程上。基本上,你会像这样启动 GDB:

     $ gdb
     (gdb) attach pid-of-child
    

    在上面,将pid-of-child替换为子进程的PID,这样就可以从交互式GDB调试子进程,不需要父进程处理完全使用 GDB。

    【讨论】:

      【解决方案2】:

      有几种方法可以以编程方式“驱动”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

      【讨论】:

        【解决方案3】:

        还有后续的 fork gdb 选项。这将立即附加到子进程。

        设置跟随分叉模式

        所以,

        设置follow-fork-mode子

        【讨论】:

          猜你喜欢
          • 2012-02-20
          • 1970-01-01
          • 2016-03-21
          • 1970-01-01
          • 2014-03-06
          • 1970-01-01
          • 1970-01-01
          • 2018-01-07
          • 1970-01-01
          相关资源
          最近更新 更多