如何检测进程是否正在调试

时间:2013-08-30 22:34:16

标签: c++ debugging gdb detect

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

编辑控制器通过http连接并与之通信并控制dummy1。我希望在某个函数中打破dummy1并按照我喜欢的步骤。当发生这种情况时,我想通知控制器。然后控制器应该改变它的状态,直到它被通知我继续dummy1。同时它不应该试图控制或启动与dummy1的通信。

我的问题是如何检测/ notify controller 当/我的 dummy1 进程当前正在调试(休息时)?

1 个答案:

答案 0 :(得分:3)

有几种可能的解决方案:

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

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

  • 一种可能更好的方法是将GDB连接到 控制器。然后你可以在你想要的任何一点停止控制器,逐步通过dummy1,恢复其中一个或两个等等。

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

  • 另一种方法是简单地运行两个GDB实例 - 一个用于控制控制器,另一个用于控制dummy1。