我有一个 C++ 应用程序,让我们调用 dummy1,我想在 Linux (ubuntu 12.04) 中的 cgdb(gdb 的一个curl 接口(interface))中调试它。 调试需要与 Controller 进程同步,我有该进程的源代码。
编辑 Controller 通过http与dummy1连接、通信和控制。我想按照我的喜好在某个函数和步骤中打破 dummy1 。发生这种情况时,我希望得到 Controller 通知。然后 Controller 应该改变它的状态,直到它收到通知我继续 dummy1。同时,它不应尝试控制 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。
关于c++ - 如何检测进程是否正在调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542412/