我可以同时在gdb中调试多个进程和/或线程,也就是说,一旦遇到断点就停止所有进程和/或线程?

时间:2017-06-09 15:05:11

标签: multithreading gdb

与标题一样。

如果其他线程/进程继续全速执行,有时对进程或线程的逐步调试会变得不方便。

如果两个进程都可以独立于bash(而不是另一个的子进程)启动,则可以通过这种方式调试两个进程。

1 个答案:

答案 0 :(得分:0)

对于线程,这应该已经正在发生。

默认情况下,GDB在 all-stop 模式下执行较差。在该模式下,GDB将在一个线程停止时立即停止所有线程(因为它接收到信号,或者因为它遇到了断点)。另请参阅this answer

虽然GDB也支持多个下级,但我不相信有任何机制可以执行“停止所有下级"相当于"停止所有线程"内置于GDB。

但是,您可以通过附加到断点的命令轻松实现:

(gdb) break foo.c:1234
(gdb) commands 1
  shell kill -STOP 4321   # stop the other inferior
end
  

如果两个进程都可以独立于bash

启动,则可以通过这种方式进行调试

当然:您可以将两个进程附加到当前GDB((gdb) help attach)或单独进程。它们从哪里开始并不重要。