c++ - 使用 GDB 调试多进程项目
问题描述
我想用 GDB 调试一个多进程 C++ 项目,特别是我想知道是否有办法实现以下目标
- 将多个进程附加到 GDB 的单个实例,同时让所有进程运行
- 在其中一个进程的源代码中设置断点会停止所有附加的进程
理想的解决方案类似于此处所述的 Visual Studio 调试器所提供的解决方案。目前我可以将多个进程附加到一个 GDB 实例,但是只有当前选择的下级被执行,而其他进程被停止并等待继续命令。
解决方案
为了能够在后台运行低级,需要发出这个gdb
命令
set target-async on
在启动之后和运行任何东西之前。此选项生效后,一个 ca 问题
continue&
(或只是c&
),这会将劣势发送到后台,从而有机会切换到运行另一个。
一次阻止所有劣势者有点困难。没有内置命令。幸运gdb
的是,它是可编写脚本的,并且可以将脚本附加到断点。一旦断点被命中,命令就会被执行。在脚本中为每个下级放置inferior n
和命令。interrupt
从 Python 脚本中执行此操作可能更方便,例如
(gdb) python
>inf = gdb.inferiors()
>for i in inf:
> gdb.execute("inferior %d" % i.num)
> gdb.execute("interrupt")