使用 GDB 调试多进程项目
Debugging multiprocess project with GDB
我想用GDB调试一个多进程的C++项目,具体想知道有没有办法实现以下
- 将多个进程附加到单个 GDB 实例,同时允许所有进程 运行
- 在其中一个进程的源代码中设置断点会停止所有附加的进程
理想的解决方案类似于 Visual Studio 调试器提供的解决方案,如 here 所述。
目前我可以将多个进程附加到一个 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")
我想用GDB调试一个多进程的C++项目,具体想知道有没有办法实现以下
- 将多个进程附加到单个 GDB 实例,同时允许所有进程 运行
- 在其中一个进程的源代码中设置断点会停止所有附加的进程
理想的解决方案类似于 Visual Studio 调试器提供的解决方案,如 here 所述。 目前我可以将多个进程附加到一个 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")