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

how to detect if process is being debugged

本文关键字:是否 调试 进程 何检测 检测      更新时间:2023-10-16

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

edit控制器通过http与dummy1进行连接、通信和控制。我想在某个函数和步骤中随意打破dummy1。当这种情况发生时,我希望得到控制器的通知。然后控制器应该改变它的状态,直到它被通知我继续dummy1。同时,它不应试图控制或启动与假人的通信1。

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

有几种可能的解决方案:

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

请注意,这回答的是"是否正在调试dummy1",而不是dummy2当前是否已停止。为了允许控制器再次进行控制,您必须将GDB与dummy1分离。

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

较新版本的GDB支持同时调试多个进程。然而,您可能会发现这相当令人困惑。

  • 另一种选择是简单地运行GDB的两个实例——一个控制控制器,另一个控制dummy1