【问题标题】:How to attach a process in eclipse for debugging of muiti-process program如何在eclipse中附加一个进程以调试多进程程序
【发布时间】:2014-02-14 06:54:52
【问题描述】:

正如我的标题所说,我在调试作为多进程程序的源代码时遇到了麻烦。 这是如下: 1.程序写成守护进程,所以父/主进程是守护进程。 2. 它分叉了许多子进程,大约 5 到 7 或 8 个进程。

我使用 eclipse 来开发我的代码,我想从 eclipse 中调试我的程序。 据我尝试,调试器不知道子进程的断点。

因此我想知道,是否有任何可用的选项可以调试我的程序,包括子进程? eclipse中是否有任何设置可以附加子pid,以便调试器切换到该子进程?

例如,假设子 pid 为 4523、4562、5462。那么在调试期间,我可以将调试器附加到 5462 吗?

提前致谢。

【问题讨论】:

  • 有点相关。几年前,在为 Domino 服务器编写插件时,我完全为类似情况找到了解决方案。最终,我最终临时将分叉代码更改为双分叉并执行配置为启动 gdb 的 xterm,附加到我在初始分叉上啜饮的 id 的子进程。这很可怕,但它非常很好地发现了隐藏在插件深处的故障。我想到目前为止,eclipse 应该已经为 gdb 配置了启用调试子进程的配置(那是 12 年前)。
  • @WhozCraig 感谢您提供的信息,是的,eclipse Kepler 现在支持调试子进程,但是目前我尝试了一个子进程是可能的。而且因为我的程序是守护进程,所以我认为这个也是 Eclipse 调试的限制,但不是 100% 确定。

标签: c eclipse multithreading debugging gdb


【解决方案1】:

查看 gdb follow-fork-mode 设置。使用此选项,您可以控制进程分叉时的 gdb 行为。您可以从 gdb 控制台设置它

gdb> set follow-fork-mode child

所以在fork gdb 会切换到子进程。这里的另一个可能值是关注parent。如果您想从一个 gdb 会话中同时调试它们,请使用此选项:

gdb> set detach-on-fork off

这将使调试器为子进程打开一个新的次级。稍后您可以像这样在它们之间切换:

gdb> inferior 1

另一种方法是从另一个 gdb 会话附加到一个新进程。

更新:我总是从控制台使用 gdb,所以我不知道 eclipse 中是否有任何 gdb 设置,也许其他人会帮助你使用 gui 选项。如果你在 eclipse 中有一个 gdb 控制台,你可以在那里尝试这个命令。

更新 2:请参阅 this link 了解 gdb fork 选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2019-01-31
    • 2015-02-24
    • 2019-08-12
    • 1970-01-01
    • 2014-10-12
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多