如何检测进程是否正在调试
how to detect if process is being debugged
我有一个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
相关文章:
- 在 Visual Studio 中调试时,是否可以将一些 C/C++ 结构内容保存到磁盘?
- 是否有 g++ 或 clang++ 调试选项来指导可变参数模板化
- 是否可以检索与柯南包管理器一起打包的库的源代码,以便在其中进行调试?
- 如何调试指针参数是否通过函数修改
- 是否可以根据LLVM-VS2014在源级别进行调试
- 破坏vulkan以测试调试回调是否正确设置的好方法是什么
- 使用 c++ 或 c# 进行远程调试是否支持编辑并继续
- 是否可以在编译时输出 constexpr 变量来调试模板元程序
- 是否可以在 Visual Studio 中的 Win32 C++应用程序中的控制台中进行调试
- Visual Studio混合模式调试是否可以附加到Jupyter笔记本以同时调试C++和Python
- 我如何检查静态库,以查看是否正在导出调试符号
- 是否可以有一个零成本assert(),这样代码就不必在调试和发布版本之间进行修改
- 编译器是否假定"this"在调试模式下不是 nullptr?
- 是否可以使用调试器调试UnhandledExceptionFilters
- C++:我是否需要具有相同版本的 GCC 和 GDB 进行调试
- 对于使用Cygwin GCC编译的C++程序,是否有免费的内存调试器
- 为了验证std::字符串是否已损坏,您将执行哪些调试验证
- 使用gcc调试选项编译生产代码是否有任何副作用
- 是否可以在visualstudio调试窗口中定义用户定义的变量
- 如何调试是否设置了 Windows 事件对象