2

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

编辑控制器通过http连接和通信并控制dummy1。我想在某个函数中破坏 dummy1 并按照我的喜好进行步进。发生这种情况时,我希望通知控制器。然后控制器应该改变它的状态,直到它得到通知我继续 dummy1。同时它不应该尝试控制dummy1 或发起与dummy1 的通信。

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

4

1 回答 1

5

有几种可能的解决方案:

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

请注意,这回答“正在调试 dummy1”,而不是 dummy1 当前是否已停止。为了让控制器再次控制,您必须将 GDB 从 dummy1 中分离出来。

  • 一种可能更好的方法是将 GDB 附加到dummy1控制器。然后您可以在任何时候停止控制器,单步执行 dummy1,恢复其中一个或两个,等等。

较新版本的 GDB 支持一次调试多个进程。但是,您可能会觉得这很令人困惑。

  • 另一种选择是简单地运行两个 GDB 实例——一个用于控制控制器,另一个用于控制 dummy1。
于 2013-08-31T05:14:12.240 回答