我有一个C++应用程序,让我们调用dummy1,我想在Linux(ubuntu 12.04)的cgdb(gdb的curl接口(interface))中调试它。
调试需要与 Controller 进程同步,这是我的来源。

编辑, Controller 通过http连接并与之通信并控制dummy1。我想按自己喜欢的方式在某个功能和步骤中断开dummy1。发生这种情况时,我想通知 Controller 。然后, Controller 应更改其状态,直到收到通知我继续执行dummy1。同时,它不应尝试控制或启动与dummy1的通信。

我的问题是如何检测/通知 Controller 当前是否正在调试我的dummy1进程(中断)?

最佳答案

有几种可能的解决方案:

  • 您问题的直接答案:您的 Controller 可以读取/ proc / PID / status(其中PID是dummy1进程的PID),并查看TracerPid字段。如果非零,则表示正在调试dummy1,并且 Controller 应避免尝试控制。

  • 注意,这回答“正在调试dummy1”,而不是dummy1当前是否停止。为了允许 Controller 再次控制,您必须将GDB与dummy1分离。
  • 可能更好的方法是将GDB附加到dummy1和controller上。然后,您可以在所需的任何位置停止 Controller ,逐步执行dummy1,恢复任一或全部恢复,依此类推。

  • 较新版本的GDB支持一次调试多个进程。但是,您可能会发现这很困惑。
  • 另一个选择是简单地运行两个GDB实例-一个用于控制 Controller ,另一个用于控制dummy1。
  • 07-26 07:35