调试一个线程会阻塞其他线程吗?

4

我有一个基本问题。我正在调试一个应用程序,编辑器一次显示20个线程。控制权在一个已经触发断点的线程手中。其他19个线程会被阻塞在各自的指令处等待第一个线程释放控制权吗?还是说在我调试第一个线程时,其他线程可能会窃取执行权?


2
你能否添加你正在使用的编程语言和环境? - Manuel
1
这取决于使用的调试器和调试环境的类型,但通常的答案是是的,其他线程将被暂停。 - Damien_The_Unbeliever
哪个调试器?gdb?devenv?... - VGE
@dragon112 @VGE @Damien_The_Unbeliever:我正在使用devenv VS2008和gdb,之前使用过Borland Builder。语言是C++。但是你们的评论提出了一个有趣的问题。你们能否详细说明一下?一个是当断点被触发时,另一个是当我逐步执行代码时。 - HS.
@David @hexa:谢谢。虽然我之前已经感谢过大家,但今天我学到了一些之前错过的东西。 - HS.
3个回答

3
如果你在询问Visual Studio...当程序遇到断点时,所有线程都会暂停。但是当你单步调试代码时,即使你只想调试一个线程,其他线程也有机会运行,这是默认行为。
然而,你可以在“线程”窗口中冻结单个线程,右键单击线程以查看上下文菜单。然后,在你单步执行代码时,“冻结”的线程不会运行。

最佳答案加1,特别是关于特定IDE的资格。Eclipse/Java在命中断点时不会挂起其他线程。 - Steve Townsend
感谢回复和点赞。当您在逐步执行代码时,如果其他(未冻结)线程运行,控制是否会返回到相同的位置,允许您恢复逐步执行?我使用Visual Studio2008和有时是gdb。 gdb的行为与Visual Studio不同吗?语言是C ++。 - HS.
关于VS2008,是的,当您逐步执行代码时,所有未冻结的线程都有一瞬间的机会运行,它们获得多少时间以及它们是否实际运行,由操作系统调度程序确定。 "瞬间"是因为应用程序在下一个断点被触发之前运行,或者在逐步执行代码行时,直到当前行执行完成。很遗憾我对gdb一无所知。 - Chris O

2
所有线程在调试器中断时都会被挂起。

1

该进程通常会被挂起,因此所有线程都会被挂起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接